2016-05-26 7 views
0

を働いていないCustomValidation:DataAnnotations私は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; 
    } 
} 

の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'があります(これはクライアント側とサーバ側の検証を行います)。なぜあなたは車輪を再発明しようとしていますか? (あなたは正規表現がそれに組み込まれ、 '[RegularExpression(@"^[1-9] {2} $ ")]ではなく[[CustomDDD] –

答えて

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を参照してください。

関連する問題