复选框HTML帮助器

时间:2010-01-19 21:07:28

标签: asp.net-mvc

我一直在研究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

}

2 个答案:

答案 0 :(得分:2)

“@name”应该是“@value”吗?看起来你试图将名称设置两次......

我很确定你想拥有以下内容:

<%= Html.CheckBox("Name", false, new {@value = Html.Encode(entity.CONTACT_NAME)}) %>

答案 1 :(得分:0)

如果您有2个具有相同名称的输入,它们将作为值列表发布(MVC将尝试将其转换为布尔值)。所以它可能会通过使用两个具有相同名称的元素来扭曲您的测试,建议更改其中一个名称。