好吧,看起来大卫是对的。这是我误解了两个领域如何一起工作,导致他的解决方案不能为我工作。
如果这可以帮助其他人,这里是我的解决方案,它是如何工作的:
首先,我不得不手工工艺两场大卫曾形容...
<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