簡體   English   中英

MVC 3復選框驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM