asp.net-mvc – 如何使用带有IEnumerable的Html.CheckBox(list)和验证

我正在一个页面上,用户需要填写一些信息,最后选择一个或多个带有复选框的客户. 客户列表是IEnumerable Customer我传入我的模型.我如何使用.CheckBoxFor()创建复选框列表? 最后,我希望能够验证是否已选择至少1个复选框. 请求是保存用户输入的信息的对象. % fo

我正在一个页面上,用户需要填写一些信息,最后选择一个或多个带有复选框的客户.

客户列表是IEnumerable< Customer>我传入我的模型.我如何使用.CheckBoxFor()创建复选框列表?

最后,我希望能够验证是否已选择至少1个复选框.

请求是保存用户输入的信息的对象.

<% foreach (var customer in Model.Request.Customers) { %>
   <%= Html.CheckBoxFor(/* customer */) %>
<% } %>

谁能指出我正确的方向?或者我这样做是错的?

解决方法

您可以创建一个自定义html扩展类并重载CheckBoxFor方法,如下所示.该方法将metadata.Model计算为传递给它的值(如美国州).您可以从ControllerAction中的FormCollection获取复选框值:

public ActionResult Edit(FormCollection formCollection) 
{
    // Get the value(s)
    string checkBox = formCollection["State"];

    // perform validation
    ....
}

示例假定keyvaluepair通用列表

<% foreach (var element in UnitedStatesDictionary())
{ %>
<%= Html.CheckBoxFor(model => model.State,null,element.Key) %><%= element.Value  %><br />
<% } %>

HtmlExtensions.cs

using System;
using System.Linq;
using System.Linq.Expressions;
using System.Web.Mvc;
using System.Web.Routing;

    public static class HtmlExtensions
    {
        /// <summary>
        /// Checks the box for.
        /// </summary>
        /// <typeparam name="TModel">The type of the model.</typeparam>
        /// <typeparam name="TValue">The type of the value.</typeparam>
        /// <param name="html">The HTML.</param>
        /// <param name="expression">The expression.</param>
        /// <returns>Checkbox</returns>
        public static MvcHtmlString CheckBoxFor<TModel,TValue>(this HtmlHelper<TModel> html,Expression<Func<TModel,TValue>> expression)
        {
            return CheckBoxFor(html,expression,new RouteDirection());
        }


        /// <summary>
        /// Checks the box for.
        /// </summary>
        /// <typeparam name="TModel">The type of the model.</typeparam>
        /// <typeparam name="TValue">The type of the value.</typeparam>
        /// <param name="html">The HTML.</param>
        /// <param name="expression">The expression.</param>
        /// <param name="htmlAttributes">The HTML attributes.</param>
        /// <returns>Checkbox</returns>
        public static MvcHtmlString CheckBoxFor<TModel,TValue>> expression,object htmlAttributes)
        {

            return CheckBoxFor(html,htmlAttributes,"");
        }

        /// <summary>
        /// Checks the box for.
        /// </summary>
        /// <typeparam name="TModel">The type of the model.</typeparam>
        /// <typeparam name="TValue">The type of the value.</typeparam>
        /// <param name="html">The HTML.</param>
        /// <param name="expression">The expression.</param>
        /// <param name="htmlAttributes">The HTML attributes.</param>
        /// <param name="checkedValue">The checked value.</param>
        /// <returns>Checkbox</returns>
        public static MvcHtmlString CheckBoxFor<TModel,object htmlAttributes,string checkedValue)
        {

            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression,html.ViewData);
            string htmlFieldName = ExpressionHelper.GetExpressionText(expression);

            TagBuilder tag = new TagBuilder("input");
            tag.Attributes.Add("type","checkbox");
            tag.Attributes.Add("name",metadata.PropertyName);
            if (!string.IsNullOrEmpty(checkedValue))
            {
                tag.Attributes.Add("value",checkedValue);
            }
            else
            {
                tag.Attributes.Add("value",metadata.Model.ToString());
            }

            if (htmlAttributes != null)
            {
                tag.MergeAttributes(new RouteValueDictionary(htmlAttributes));
            }

            if (metadata.Model.ToString() == checkedValue)
            {
                tag.Attributes.Add("checked","checked");
            }
            return MvcHtmlString.Create(tag.ToString(TagRenderMode.SelfClosing));
        }
    }

我在这里,这是我的美国名单,以完成代码:

/// <summary>
/// United States dictionary.
/// </summary>
/// <returns>List of United States</returns>
public static List<KeyValuePair<string,string>> UnitedStatesDictionary()
{
    var arrList = new List<KeyValuePair<string,string>>();
    arrList.Add(new KeyValuePair<string,string>("AL","Alabama"));
    arrList.Add(new KeyValuePair<string,string>("AK","Alaska"));
    arrList.Add(new KeyValuePair<string,string>("AZ","Arizona" ));
    arrList.Add(new KeyValuePair<string,string>("AR","Arkansas" ));
    arrList.Add(new KeyValuePair<string,string>("CA","California" ));
    arrList.Add(new KeyValuePair<string,string>("CO","Colorado" ));
    arrList.Add(new KeyValuePair<string,string>("CT","Connecticut" ));
    arrList.Add(new KeyValuePair<string,string>("DE","Delaware" ));
    arrList.Add(new KeyValuePair<string,string>("DC","District Of Columbia" ));
    arrList.Add(new KeyValuePair<string,string>("FL","Florida" ));
    arrList.Add(new KeyValuePair<string,string>("GA","Georgia" ));
    arrList.Add(new KeyValuePair<string,string>("HI","Hawaii" ));
    arrList.Add(new KeyValuePair<string,string>("ID","Idaho" ));
    arrList.Add(new KeyValuePair<string,string>("IL","Illinois" ));
    arrList.Add(new KeyValuePair<string,string>("IN","Indiana" ));
    arrList.Add(new KeyValuePair<string,string>("IA","Iowa" ));
    arrList.Add(new KeyValuePair<string,string>("KS","Kansas" ));
    arrList.Add(new KeyValuePair<string,string>("KY","Kentucky" ));
    arrList.Add(new KeyValuePair<string,string>("LA","Louisiana" ));
    arrList.Add(new KeyValuePair<string,string>("ME","Maine" ));
    arrList.Add(new KeyValuePair<string,string>("MD","Maryland" ));
    arrList.Add(new KeyValuePair<string,string>("MA","Massachusetts" ));
    arrList.Add(new KeyValuePair<string,string>("MI","Michigan" ));
    arrList.Add(new KeyValuePair<string,string>("MN","Minnesota" ));
    arrList.Add(new KeyValuePair<string,string>("MS","Mississippi" ));
    arrList.Add(new KeyValuePair<string,string>("MO","Missouri" ));
    arrList.Add(new KeyValuePair<string,string>("MT","Montana" ));
    arrList.Add(new KeyValuePair<string,string>("NE","Nebraska" ));
    arrList.Add(new KeyValuePair<string,string>("NV","Nevada" ));
    arrList.Add(new KeyValuePair<string,string>("NH","New Hampshire" ));
    arrList.Add(new KeyValuePair<string,string>("NJ","New Jersey" ));
    arrList.Add(new KeyValuePair<string,string>("NM","New Mexico" ));
    arrList.Add(new KeyValuePair<string,string>("NY","New York" ));
    arrList.Add(new KeyValuePair<string,string>("NC","North Carolina" ));
    arrList.Add(new KeyValuePair<string,string>("ND","North Dakota" ));
    arrList.Add(new KeyValuePair<string,string>("OH","Ohio" ));
    arrList.Add(new KeyValuePair<string,string>("OK","Oklahoma" ));
    arrList.Add(new KeyValuePair<string,string>("OR","Oregon" ));
    arrList.Add(new KeyValuePair<string,string>("PA","Pennsylvania" ));
    arrList.Add(new KeyValuePair<string,string>("RI","Rhode Island" ));
    arrList.Add(new KeyValuePair<string,string>("SC","South Carolina" ));
    arrList.Add(new KeyValuePair<string,string>("SD","South Dakota" ));
    arrList.Add(new KeyValuePair<string,string>("TN","Tennessee" ));
    arrList.Add(new KeyValuePair<string,string>("TX","Texas" ));
    arrList.Add(new KeyValuePair<string,string>("UT","Utah" ));
    arrList.Add(new KeyValuePair<string,string>("VT","Vermont" ));
    arrList.Add(new KeyValuePair<string,string>("VA","Virginia" ));
    arrList.Add(new KeyValuePair<string,string>("WA","Washington" ));
    arrList.Add(new KeyValuePair<string,string>("WV","West Virginia" ));
    arrList.Add(new KeyValuePair<string,string>("WI","Wisconsin" ));
    arrList.Add(new KeyValuePair<string,string>("WY","Wyoming" ));
    return arrList;
}

作者: dawei

【声明】:永州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部