4

私は選択可能な最小数と選択可能な最大数を指定できるチェックボックスフィールドのグループで使用できる再利用可能なバリデータを持っていたいと思います。私は、サーバー側のチェックとクライアント側の検証の両方を作成してjQueryの妥協のないJavaScriptを使用してフレームワークを確認する方法を正確にはわかりません。最小数と最大数のチェックボックスでASP.NET MVC3バリデータを作成するにはどうすればよいですか?

This questionは、クライアント側のアダプタではうまく始めると思われますが、サーバー上でそれをどのように検証するにはどうすればよいですか?

答えて

5

ここでは、少なくともサーバ側の検証を開始する方法について説明します。複数の概念を示すvery nice articleは次のとおりです。

検証属性:

public class CheckBoxesValidationAttribute : ValidationAttribute 
{ 
    public CheckBoxesValidationAttribute (int min, int max) 
    { 
     Min = min; 
     Max = max; 
    } 

    public int Min { get; private set; } 
    public int Max { get; private set; } 

    public override bool IsValid(object value) 
    { 
     var values = value as IEnumerable<bool>; 
     if (values != null) 
     { 
      var nbChecked = values.Where(x => x == true).Count(); 
      return Min <= nbChecked && nbChecked <= Max; 
     } 
     return base.IsValid(value); 
    } 
} 

モデル:

public class MyViewModel 
{ 
    [CheckBoxesValidation(1, 2, ErrorMessage = "Please select at least one and at most 2 checkboxes")] 
    public IEnumerable<bool> Values { get; set; } 
} 

コントローラー:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      Values = new[] { true, false, true, false } 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(model); 
    } 
} 

ビュー(〜/ビュー/ホーム/ Index.cshtml):

@Html.ValidationSummary() 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.Values) 
    <input type="submit" value="OK" /> 
} 

エディタテンプレート(~/Views/Home/EditorTemplates/bool.cshtml):

@model bool 
@Html.CheckBoxFor(x => x) 
+0

+1優れた回答! =)非常に便利なもの! – gideon

1

Brad Wilsonは、mvcConfでmvcの検証について素晴らしいプレゼンテーションを行いました。

関連する問題