好吧,看起來大衛是對的。這是我誤解了兩個領域如何一起工作,導致他的解決方案不能爲我工作。
如果這可以幫助其他人,這裏是我的解決方案,它是如何工作的:
首先,我不得不手工工藝兩場大衛曾形容...
<input <%
If category.Value = True Then
%> checked <%
End If
%> class="filterCheckbox" id="model_MarketCategories_<%=i%>__Value" name="model.MarketCategories[<%=i %>].Value" type="checkbox" value="true" />
<input name="model.MarketCategories[<%=i%>].Value" type="hidden" value="False" />
現在快速回顧一下爲什麼有2場:
// Render an additional <input type="hidden".../> for checkboxes. This
// addresses scenarios where unchecked checkboxes are not sent in the request.
// Sending a hidden input makes it possible to know that the checkbox was present
// on the page when the request was submitted.
現在的原因兩個元件有相同的名稱是這樣的:如果瀏覽器會忽略具有相同名稱的所有其他輸入值一旦爲f用一個有效的價值ound。所以如果你的瀏覽器總是返回複選框的值(不管是否被選中),那麼隱藏的元素將被忽略。另一方面,如果未選中複選框,則瀏覽器不發送複選框值,則緊跟在該複選框後面的元素將將form屬性的值設置爲false並返回THAT。
我的誤解是,我認爲該複選框應該總是存儲實際屬性的值,所以是這樣的:
<input <%
If category.Value = True Then
%> checked <%
End If
%> class="filterCheckbox" id="model_MarketCategories_<%=i%>__Value" name="model.MarketCategories[<%=i %>].Value" type="checkbox" value="<%=category.Value %>" />
這是什麼造成的問題...複選框「價值」應該總是爲真。隱藏的「價值」應該始終是錯誤的。這是複選框的狀態(選中或不選),將決定將哪些內容返回給控制器。
感謝大衛......有時候答案可能就在你的面前,但如果你的大腦還沒有準備好接受,沒有什麼資深程序員可以做;-)
我相信這是預期的行爲,則隱藏字段始終保持爲false,因爲某些瀏覽器在未選中時不會發送複選框。所以你會得到的場景是 真/假 假/假 假 所以基本上,如果其中一個輸入爲真,其檢查,否則它不檢查。隱藏的領域只是爲了確保他們總是有一些數據在那裏檢查。 – dnolan 2010-05-10 16:37:53