DataAnnotations CustomValidation不起作用

时间:2016-05-26 17:05:35

标签: c# asp.net-mvc data-annotations

我已经创建了一个非常简单的代码来测试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")
}

当输入被提交并且我没有ideia为什么时,没有任何东西被验证。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

当您添加自定义验证时,您必须通过检查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以供参考。