我的asp.net mvc视图中有一个表单如下:
<%using (Html.BeginForm("SearchBorrowed", "Admin", FormMethod.Get))
{ %>
<%: Html.TextBox("searchTerm", Request.QueryString["searchterm"])%>
<input type="submit" value="Search" />
<br />
Is Returned :
<%:Html.CheckBox("IsReturned")%>
<%} %>
这是'SearchBorrowed'动作:
public ActionResult SearchBorrowed(bool IsReturned=false, string searchTerm = null)
{
IEnumerable<BorrwoinfInfo> bs;
//...Get from repository
return View(bs.ToList());
}
最后路由设置:
routes.MapRoute(
"SearchBorrowed", // Route name
"{controller}/{action}/{*searchTerm}", // URL with parameters
new
{
controller = "Admin",
action = "SearchBorrowed",
searchTerm = UrlParameter.Optional
} // Parameter defaults
当我提交表单而未选中“IsReturned”复选框时, 它返回结果,网址如下:
... / SearchBorrowed搜索关键词=安培; IsReturned =假
但是当我检查IsReturned'Checkbox时,网址就是这样的:
... / SearchBorrowed搜索关键词= S&安培; IsReturned =真安培; IsReturned =假
为什么上面的网址中有两个IsReturned?!
我该如何解决这个问题?
答案 0 :(得分:2)
为什么上面的网址中有两个IsReturned?!
因为Html.CheckBox
助手会生成一个与复选框同名的其他隐藏输入字段。如果查看生成的HTML,您将看到帮助程序生成了以下2个输入字段:
<input type="checkbox" name="IsReturned" id="IsReturned" value="true" checked="checked" />
<input type="hidden" name="IsReturned" id="IsReturned" value="false" />
这是设计的。此帮助程序旨在绑定到视图模型上的布尔属性。如果未选中复选框字段,则不会向服务器发送任何值,因此如果没有隐藏字段,则无法将其绑定到布尔字段。
如果您不想要这个隐藏字段,您可以编写自定义帮助程序或手动生成复选框字段。