为什么世界上有这样的界限:
<%= Html.CheckBox("ForSale", Model.Product.ForSale)%> For Sale
Run Code Online (Sandbox Code Playgroud)
得到以下HTML:
<input id="ForSale" name="ForSale" type="checkbox" value="true" />
<input name="ForSale" type="hidden" value="false" />
For Sale
Run Code Online (Sandbox Code Playgroud)
现在每当我检查框和访问时Request.Form["ForSale"]
,我都会得到一个荒谬的回答"true,false"
.我应该解析那个吗?
对于其他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());
}
Run Code Online (Sandbox Code Playgroud)
blo*_*art 38
如果未选中,则强制包含该字段.如果取消选中复选框,它将不会作为页面的一部分发送 - 只有在选中它们时才会发送它们,然后它们的值为true.如果取消选中复选框,隐藏字段将确保将发送false,因为始终会发送隐藏字段.
我采取了另一种方法:
不要使用Html.CheckBoxFor或Html.CheckBox帮助器方法来呈现复选框,而应使用普通的html呈现:
<input id="ShowOther" name="ShowOther" value="<%=Model.ShowOther %>" type="checkbox" <% if (Model.ShowOther) { %>checked="checked"<% } %> />
Run Code Online (Sandbox Code Playgroud)
并且我添加了一个jQuery脚本,用于在选中/取消选中复选框时设置值。
<script type="text/javascript">
$(function() {
$('#ShowOther').click(function() {
var checked = $(this).attr('checked');
if (checked != undefined)
$(this).val(true);
else
$(this).val(false);
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
据我所能测试的那样,似乎总是将正确的值发送到Controller,而不再有“ true,false”的问题。
归档时间: |
|
查看次数: |
14071 次 |
最近记录: |