2016-05-26 4 views
0

Ich habe einen wirklich einfachen Code erstellt CustomValidations zu testen, aber es funktioniert nicht:DataAnnotations CustomValidation funktioniert nicht

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

Ansichtsmodell

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

-Controller

using UniversidadeCorporativa.ViewModels; 
public ActionResult Teste() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult Teste(TesteViewModel model) 
{ 
    try 
    { 
     return RedirectToAction("Teste"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

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

Nichts ist validiert, wenn die Eingabe eingereicht wird und ich habe keine idea warum. Kann jemand helfen?

+3

Wohin soll die Validierung ausgeführt werden? Ich sehe keinen Code, der eine Validierung durchführt. (Ich sehe nicht, dass Sie den Controller für 'ModelState.IsValid' einchecken, noch sehe ich ein Javascript, das die Validierung durchführt). –

+0

MVC hat bereits ein 'RegularExpressionAttribute' (welches Client- und Serverseitige Validierung ermöglicht). Warum versuchst du das Rad neu zu erfinden? (Und Sie können dieses Attribut immer erweitern, so dass die Regex darin eingebaut ist und Sie können nur '[CustomDDD]' anstelle von '[RegularExpression (@"^[1-9] {2} $ ")]' verwenden –

Antwort

2

Wenn Sie eine benutzerdefinierte Validierung hinzufügen, wird es Ihnen Server-Seite testen müssen durch ModelState.IsValid auf Teste Aktion Überprüfung:

[HttpPost] 
public ActionResult Teste(TesteViewModel model) 
{ 
    try 
    { 
     if(ModelState.IsValid) 
     { 
      // your model is valid! 
     } 

     return RedirectToAction("Teste"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

Wie es aussieht, wird ein CustomValidation Attribut nicht automatisch in jQuery unauffällig angeschlossen werden Validierungsbibliothek. Daher wird es nicht clientseitig funktionieren, bis Sie eine benutzerdefinierte jQuery-Validierungsregel erstellen. Siehe this blog post als Referenz.