2016-05-26 3 views
0

Я создал очень простой код, чтобы проверить CustomValidations пока он не работает:DataAnnotations не CustomValidation работает

Validation

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; 
    } 
} 

ViewModel

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") 
} 

Ничего не проверено, если вход подан, и у меня нет идей. Может кто-нибудь помочь?

+3

Где вы хотите выполнить валидацию? Я не вижу никакого кода, который бы выполнял какую-либо проверку. (Я не вижу, что вы проверяете контроллер для «ModelState.IsValid» и не видите какой-либо javascript, который делает проверку). –

+0

MVC уже имеет 'RegularExpressionAttribute' (который дает подтверждение на стороне клиента и сервера). Почему вы пытаетесь изобрести колесо? (и вы всегда можете расширить этот атрибут, чтобы в него встроено регулярное выражение, и вы можете использовать только '[CustomDDD]', а не '[RegularExpression (@"^[1-9] {2} $ ")]' –

ответ

2

При добавлении пользовательской проверки, вам придется проверить стороны это сервер, проверяя ModelState.IsValid на вашем Teste действия:

[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 для справки.