【问题标题】:How do I create an ASP.NET MVC3 validator for minimum and maximum number of checkboxes?如何为最小和最大复选框数创建 ASP.NET MVC3 验证器?
【发布时间】:2011-07-25 08:09:50
【问题描述】:

我想要一个可重用的验证器,我可以在一组复选框字段上使用它,它可以让我指定要选择的最小数量和可以选择的最大数量。我不确定如何创建服务器端检查和客户端验证以使用不显眼的 javascript 挂钩到 jQuery 验证框架。

This question 在客户端适配器上似乎是一个好的开始,但是如何将它们结合在一起以在服务器上对其进行验证?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 jquery-validate unobtrusive-javascript


    【解决方案1】:

    这是您至少可以开始进行服务器端验证的方法。这是一个说明多个概念的very nice article

    验证属性:

    public class CheckBoxesValidationAttribute : ValidationAttribute
    {
        public CheckBoxesValidationAttribute (int min, int max)
        {
            Min = min;
            Max = max;
        }
    
        public int Min { get; private set; }
        public int Max { get; private set; }
    
        public override bool IsValid(object value)
        {
            var values = value as IEnumerable<bool>;
            if (values != null)
            {
                var nbChecked = values.Where(x => x == true).Count();
                return Min <= nbChecked && nbChecked <= Max;
            }
            return base.IsValid(value);
        }
    }
    

    型号:

    public class MyViewModel
    {
        [CheckBoxesValidation(1, 2, ErrorMessage = "Please select at least one and at most 2 checkboxes")]
        public IEnumerable<bool> Values { get; set; }
    }
    

    控制器:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var model = new MyViewModel
            {
                Values = new[] { true, false, true, false }
            };
            return View(model);
        }
    
        [HttpPost]
        public ActionResult Index(MyViewModel model)
        {
            return View(model);
        }
    }
    

    查看(~/Views/Home/Index.cshtml):

    @Html.ValidationSummary()
    @using (Html.BeginForm()) 
    {
        @Html.EditorFor(x => x.Values)
        <input type="submit" value="OK" />
    }
    

    编辑器模板(~/Views/Home/EditorTemplates/bool.cshtml):

    @model bool
    @Html.CheckBoxFor(x => x)
    

    【讨论】:

      【解决方案2】:

      Brad Wilson 在 mvcConf 上做了关于 mvc 验证的精彩演讲。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多