0

は3つのチェックボックスを持って、私は彼らにそのように検証する:1つのチェックボックスが2他にチェックされている場合MVC 3チェックボックス検証

をチェックするチェックボックスがオフになっている場合は、無効になり、他の2 checkboesが再び有効になります。

コントローラ

public ActionResult SolarPart() 
    { 
     var model = new SolarParentViewModel(); 
     var list = new List<URLTimeLimitViewModel>(); 
     list.Add(new URLTimeLimitViewModel { Name = "14 dage", IsChecked = false, Id = 1 }); 
     list.Add(new URLTimeLimitViewModel { Name = "1 Måned", IsChecked = false, Id = 2 }); 
     list.Add(new URLTimeLimitViewModel { Name = "2 Måneder", IsChecked = false, Id = 3 }); 
     model.TimeLimit = list; 
     return View(model); 
    } 

ビュー

@for (var i = 0; i < Model.TimeLimit.Count; i++) 
{ 
    <div class="editor-label"> 
    @Html.LabelFor(c=>Model.TimeLimit[i].Name, Model.TimeLimit[i].Name) 
     @Html.HiddenFor(c=>Model.TimeLimit[i].Id) 
     @Html.CheckBoxFor(c=>Model.TimeLimit[i].IsChecked) 
    </div> 
} 

答えて

4

値を使用すると、ラジオボタンの代わりに、チェックボックスを使用して検討するかもしれない相互に排他的である場合。彼らはあなたのシナリオにもっと適応しているようです。相互に排他的なチェックボックスを使用したい場合は、javascriptを使用し、それぞれのchangeイベントをサブスクライブし、値に基づいて他の2つのチェックボックスを切り替えることができます。その後、

public class MaximumOneTimeLimitCanBeCheckedAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     var list = value as IEnumerable<URLTimeLimitViewModel>; 
     if (list == null) 
     { 
      return true; 
     } 
     return list.Where(x => x.IsChecked).Count() < 2; 
    } 
} 

と::そして、サーバー上でこのモデルを検証するために、あなたのビューモデルのTimeLimitプロパティにも適用することができるいずれかのカスタム検証属性を書くことができ

本当にだった
public class SolarParentViewModel 
{ 
    [MaximumOneTimeLimitCanBeChecked] 
    public IList<URLTimeLimitViewModel> TimeLimit { get; set; } 
} 
+0

ああ、私の愚かな...もちろん私はラジオボタンを使用する必要があります、愚かな質問を申し訳ありません。 – Timsen

関連する問題