如何为最小和最大数量的复选框创建 ASP.NET MVC3 验证器?

How do I create an ASP.NET MVC3 validator for minimum and maximum number of checkboxes?

提问人:Austin 提问时间:3/29/2011 最后编辑:CommunityAustin 更新时间:3/29/2011 访问量:1281

问:

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

这个问题在客户端适配器上似乎是一个好的开始,但是如何将它们联系在一起以在服务器上验证它呢?

asp.net-mvc-3 jquery-validate unobtrusive-javascript

评论


答:

1赞 archil 3/29/2011 #1

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

5赞 Darin Dimitrov 3/29/2011 #2

以下是至少可以开始服务器端验证的方法。这是一篇非常好的文章,说明了多个概念。

验证属性:

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)