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

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

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

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

最佳答案

以下是您至少可以开始服务器端验证的方法。这是一个 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; }
}

Controller :
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)

关于asp.net-mvc - 如何为最小和最大数量的复选框创建 ASP.NET MVC3 验证器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5473918/

相关文章:

jquery - 如何使用 jquery validate 和 Chosen 验证多选?

jQuery 验证插件将成功类添加到另一个元素

asp.net-mvc - 在 MVC 4 中为实体动态创建数据库连接字符串

asp.net-mvc - Sitecore 8 MVC Glass 查询数据源

asp.net-mvc-3 - 在 MVC3 项目中使用 Apicontroller

asp.net-mvc-3 - ASP.Net MVC 中错误 View 的动态布局

jquery - 使用 focusout 设置自定义验证器消息

asp.net - 如何在vb.net global.asax中初始化自动映射器

asp.net-mvc - ASP.Net MVC 中的 self AJAX 更新部分 View / Controller 和复制 div

asp.net-mvc-3 - 当我只有一个简短的显示名称时如何获取枚举?