为什么在世界上行的:
<%= Html.CheckBox("ForSale",Model.Product.ForSale)%> For Sale
导致以下HTML:
<input id="ForSale" name="ForSale" type="checkBox" value="true" /> <input name="ForSale" type="hidden" value="false" /> For Sale
现在每当我检查框并访问Request.Form [“ForSale”],我得到的可笑答案“真,假”。我应该解析吗?
此隐藏字段不会显示为其他HtmlHelper控件,那么为什么它为CheckBox?
如何将这个愚蠢的“功能”关闭?或者HtmlHelper刚刚超出它的用途?
更新
从下面的答案,似乎在这背后有一些逻辑。我已经准备了一个小的扩展方法,所以我不必考虑它(感谢@ eu-ge-ne):
public static bool GetCheckBoxValue(this System.Web.HttpRequestBase req,string name) { return Convert.ToBoolean(req.Form.GetValues(name).First()); }
解决方法
如果未选中,则强制包含该字段。如果取消选中复选框,则不会将其作为网页的一部分发送 – 它们仅在选中时发送,然后值为true。隐藏字段确保在复选框未选中时将发送false,因为始终发送隐藏字段。