2012-06-06 30 views
2

我試圖在一組複選框上實現必需的驗證。基本上需要檢查其中的一個,複選框的數量是動態的。我對下面的代碼不是非常自信,我開始認爲我可能需要使用Javascript。我認爲該代碼爲自己說話最好。對使用​​for循環插入的複選框進行必需的驗證

HTML:

 @for (var i = 0; i < Model.Sessions.Count(); i++) 
    { 
     @Html.HiddenFor(it => it.Sessions[i].Id) 
     @Html.LabelFor(it => it.Sessions[i].Name, Model.Sessions[i].Name) 
     @Html.CheckBoxFor(it => it.Sessions[i].Checkbox) 
    } 
    @Html.ValidationMessageFor(model => model.Sessions) 

C#(視圖模型):

[NotNull] 
    [GlobalisedRequired] 
    public virtual List<CheckBoxModel> Sessions { get; set; } 
+0

您可以創建一個jQuery驗證腳本,該腳本將獲取複選框列表並確保其中一個複選框被選中。不過,您也必須添加某種服務器驗證。 – Dismissile

回答

1

相反RequiredAttribute標籤的(你總是會得到來自複選框值),你應該使用自定義的驗證,如這裏所描述:

How would you validate a checkbox in ASP.Net MVC 2?

然後添加[BooleanRequiredToBeTrue] attri插入CheckBoxModel類中的Checkbox屬性。

當然,您可以使用JavaScript客戶端驗證,但在服務器端驗證也是必要的。

+0

這並不奏效,我認爲如果這樣做會導致我必須檢查每一個複選框。我確實有服務器端驗證。我主要希望有一個統一的驗證方式,到目前爲止,我大部分都能夠不使用JavaScript。 – Asgeir

+0

@Asgeir:我更新了我的答案 - [Required]屬性將檢查字段中是否有值,並且總會有(true爲false)。您需要使用自定義驗證程序來檢查值是否爲 – PanJanek

+0

謝謝,這確實有所幫助,但鏈接到的解決方案是隻有一個複選框需要檢查的問題。我不需要檢查所有的盒子,只需要其中的任何一個。是否有可能爲列表做IsValid覆蓋? – Asgeir