Aus*_*tin 4 asp.net-mvc unobtrusive-javascript jquery-validate asp.net-mvc-3
我想要一个可重复使用的验证器,我可以在一组复选框字段上使用它,这将允许我指定要选择的最小数字和可以选择的最大数字.我不确定如何创建服务器端检查和客户端验证,以使用不引人注目的javascript挂钩到jQuery验证框架.
这个问题似乎是客户端适配器的良好开端,但是如何将它们组合在一起以在服务器上验证它?
以下是您至少可以开始进行服务器端验证的方法.这是一篇非常好的文章,说明了多个概念.
验证属性:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
模型:
public class MyViewModel
{
[CheckBoxesValidation(1, 2, ErrorMessage = "Please select at least one and at most 2 checkboxes")]
public IEnumerable<bool> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
查看(〜/ Views/Home/Index.cshtml):
@Html.ValidationSummary()
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Values)
<input type="submit" value="OK" />
}
Run Code Online (Sandbox Code Playgroud)
编辑模板(~/Views/Home/EditorTemplates/bool.cshtml):
@model bool
@Html.CheckBoxFor(x => x)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1249 次 |
| 最近记录: |