2013-12-12 57 views
0

基本上我有一個字符串集合,我想將它們呈現爲頁面上的複選框。要做到這一點,我寫了這個代碼:當第一個複選框未選中時,在MVC中提交複選框集合會生成null

@for (var i=0; i< Model.AvailableCats.Length; i++) 
{ 
    <input type="checkbox" name="Cats[@i]" value="@Model.Cats[i]" @(Model.Cats.Contains(Model.AvailableCats[i]) ? "checked=checked" : "") /> @Model.AvailableCats[i] 
} 

由此產生的複選框像

<input type="checkbox" checked="checked" value="Bengal" name="Cats[0]"> 
<input type="checkbox" checked="checked" value="Moggy" name="Cats[1]"> 

當提交該工程確定,如果兩者都檢查,或者如果第一個被選中,但如果只有第二項目被選中,它只提交Cats [1],MVC不會將其映射到數組中。

我確定答案很簡單,但我如何提交我的複選框值集合?

回答

1

這就是爲什麼Html.Checkbox實際上將隱藏的輸入元素另外添加到複選框輸入。複選框只會在檢查時提交一個值,因此添加具有相同名稱的隱藏輸入意味着如果未檢查,將提交,即使它只是一個空字符串。

<input type="checkbox" checked="checked" value="Bengal" name="Cats[0]"> 
<input type="hidden" name="Cats[0]" value=""> 
<input type="checkbox" checked="checked" value="Moggy" name="Cats[1]"> 
<input type="hidden" name="Cats[1]" value=""> 
+0

這很聰明,我以爲你必須使用javascript欺騙,但這是非常優雅的。幸運的是,在我的情況下,價值是否未被提交併不重要,但在很重要的情況下可以使用。 – NibblyPig

0

好的答案很簡單,只是每個人都有相同的名稱屬性。它不必是唯一的,如果提交了多個MVC,MVC將它綁定到一個集合中。

<input type="checkbox" checked="checked" value="Bengal" name="Cats"> 
<input type="checkbox" checked="checked" value="Moggy" name="Cats"> 

讓我驚訝的是我花了那麼長時間。

相關問題