DataAnnotations CustomValidation 不工作
DataAnnotations CustomValidation not working
我创建了一个非常简单的代码来测试 CustomValidations,但它不起作用:
验证
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
namespace UniversidadeCorporativa.Util
{
public class CustomDDD : ValidationAttribute
{
private Regex _regex = new Regex(@"^[1-9]{2}$");
public override bool IsValid(object value)
{
if (_regex.IsMatch(value.ToString()))
{
return true;
}
return false;
}
}
视图模型
using UniversidadeCorporativa.Util;
using System.ComponentModel.DataAnnotations;
namespace UniversidadeCorporativa.ViewModels
{
public class TesteViewModel
{
public TesteViewModel()
{ }
[Required]
[CustomDDD]
[Display(Name = "DDD")]
public int DDDCel { get; set; }
[Required]
[Display(Name = "Celular")]
public int Celular { get; set; }
}
}
控制器
using UniversidadeCorporativa.ViewModels;
public ActionResult Teste()
{
return View();
}
[HttpPost]
public ActionResult Teste(TesteViewModel model)
{
try
{
return RedirectToAction("Teste");
}
catch
{
return View();
}
}
查看
@model UniversidadeCorporativa.ViewModels.TesteViewModel
@{
ViewBag.Title = "Teste";
}
<h2>Teste</h2>
@using (Html.BeginForm("Teste", "Universidade", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@*@Html.ValidationSummary("", new { @class = "text-danger" })*@
<div class="form-group">
@Html.LabelFor(m => m.Celular, new { @class = "col-md-2 control-label" })
<div class="col-md-2">
@Html.TextBoxFor(m => m.DDDCel, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.DDDCel)
</div>
<div class="col-md-8">
@Html.TextBoxFor(m => m.Celular, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Celular)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Teste" />
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
提交输入时没有验证任何内容,我不知道为什么。有人可以帮忙吗?
当您添加自定义验证时,您将必须通过在您的 Teste 操作上检查 ModelState.IsValid
来测试它的服务器端:
[HttpPost]
public ActionResult Teste(TesteViewModel model)
{
try
{
if(ModelState.IsValid)
{
// your model is valid!
}
return RedirectToAction("Teste");
}
catch
{
return View();
}
}
就目前而言,CustomValidation 属性不会自动挂接到 jQuery 的不显眼的验证库中。因此,在您创建自定义 jQuery 验证规则之前,它不会在客户端工作。请参阅 this blog post 以供参考。
我创建了一个非常简单的代码来测试 CustomValidations,但它不起作用:
验证
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
namespace UniversidadeCorporativa.Util
{
public class CustomDDD : ValidationAttribute
{
private Regex _regex = new Regex(@"^[1-9]{2}$");
public override bool IsValid(object value)
{
if (_regex.IsMatch(value.ToString()))
{
return true;
}
return false;
}
}
视图模型
using UniversidadeCorporativa.Util;
using System.ComponentModel.DataAnnotations;
namespace UniversidadeCorporativa.ViewModels
{
public class TesteViewModel
{
public TesteViewModel()
{ }
[Required]
[CustomDDD]
[Display(Name = "DDD")]
public int DDDCel { get; set; }
[Required]
[Display(Name = "Celular")]
public int Celular { get; set; }
}
}
控制器
using UniversidadeCorporativa.ViewModels;
public ActionResult Teste()
{
return View();
}
[HttpPost]
public ActionResult Teste(TesteViewModel model)
{
try
{
return RedirectToAction("Teste");
}
catch
{
return View();
}
}
查看
@model UniversidadeCorporativa.ViewModels.TesteViewModel
@{
ViewBag.Title = "Teste";
}
<h2>Teste</h2>
@using (Html.BeginForm("Teste", "Universidade", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@*@Html.ValidationSummary("", new { @class = "text-danger" })*@
<div class="form-group">
@Html.LabelFor(m => m.Celular, new { @class = "col-md-2 control-label" })
<div class="col-md-2">
@Html.TextBoxFor(m => m.DDDCel, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.DDDCel)
</div>
<div class="col-md-8">
@Html.TextBoxFor(m => m.Celular, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Celular)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Teste" />
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
提交输入时没有验证任何内容,我不知道为什么。有人可以帮忙吗?
当您添加自定义验证时,您将必须通过在您的 Teste 操作上检查 ModelState.IsValid
来测试它的服务器端:
[HttpPost]
public ActionResult Teste(TesteViewModel model)
{
try
{
if(ModelState.IsValid)
{
// your model is valid!
}
return RedirectToAction("Teste");
}
catch
{
return View();
}
}
就目前而言,CustomValidation 属性不会自动挂接到 jQuery 的不显眼的验证库中。因此,在您创建自定义 jQuery 验证规则之前,它不会在客户端工作。请参阅 this blog post 以供参考。