[英]MVC 3 Checkboxes validation
在我的IVE IVE中有3個復選框,我想通過以下方式對其進行驗證:
如果選中了一個復選框,則其他兩個禁用;如果未選中,則再次啟用其他兩個復選框。
調節器
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>
}
如果這些值是互斥的,則可以考慮使用單選按鈕而不是復選框。 它們似乎更適合您的情況。 如果出於某些非常奇怪的原因,您仍然想要使用互斥的復選框,則可以使用javascript並訂閱每個復選框的change事件,然后基於該值切換其他2個復選框。 為了在服務器上驗證此模型,您可以編寫一個自定義驗證屬性,該屬性可以應用於視圖模型的TimeLimit
屬性:
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;
}
}
接着:
public class SolarParentViewModel
{
[MaximumOneTimeLimitCanBeChecked]
public IList<URLTimeLimitViewModel> TimeLimit { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.