我一直在研究ASP.net MVC项目,该项目在其中一个视图中使用了复选框HTML Helpers。我正在尝试解决的问题是在页面刷新时保持复选框状态,或者当用户点击浏览器上的后退按钮时。我正在尝试使用HTML帮助程序作为开始,但我不完全了解它的工作原理。我坚持要求HTML属性的第三个参数。我所拥有的表格的片段如下:
<tr>
<td><label for="Name">Name</label></td>
<td><%= Html.Encode(entity.CONTACT_NAME)%></td>
<td><input type="checkbox" name="Name" value="<%= Html.Encode(entity.CONTACT_NAME)%>"/> </td>
<td><%= Html.CheckBox("Name", false, new {@name = Html.Encode(entity.CONTACT_NAME)}) %></td>
</tr>
为了避免混淆,我在我的表单之前声明了一个名为entity的对象,它有几个字符串值,其中一个是CONTACT_NAME。我在HTML Helper正上方有一个单独的标准html复选框,用于测试目的。当我的表单POST时,如果我选择标准复选框,我得到值,如果我选择帮助器,我只得到真。
感谢任何帮助,谢谢。
更新:
@NickLarsen - 查看生成的HTML代码,值为“false”
按照anthonyv和JonoW的建议进行更改,我的观点如下:
<tr>
<td><label for="Name">Name</label></td>
<td><%= Html.Encode(entity.CONTACT_NAME)%></td>
<td><%= Html.CheckBox("Name", false, new {@value = Html.Encode(entity.CONTACT_NAME)}) %></td>
</tr>
但是生成的HTMl仍然将值显示为布尔“false”而不是实际的CONTACT_NAME。
根据NickLarsen的建议,这是我的控制器中检查值的代码。
public ActionResult ProcessRequest(Request request, FormCollection form)
{
var aChangeRequest = new ChangeRequest();
TryUpdateModel(aChangeRequest, new string[] { "Name" },form.ToValueProvider());
//Way more follows
}
答案 0 :(得分:2)
“@name”应该是“@value”吗?看起来你试图将名称设置两次......
我很确定你想拥有以下内容:
<%= Html.CheckBox("Name", false, new {@value = Html.Encode(entity.CONTACT_NAME)}) %>
答案 1 :(得分:0)
如果您有2个具有相同名称的输入,它们将作为值列表发布(MVC将尝试将其转换为布尔值)。所以它可能会通过使用两个具有相同名称的元素来扭曲您的测试,建议更改其中一个名称。