为什么Html.EditorFor呈现隐藏字段?

时间:2013-07-03 03:54:18

标签: asp.net-mvc-4

我在服务器端有一个代码:

@Html.EditorFor(m => m.RememberMe)

RememberMe是我模型的布尔字段。 渲染的HTML:

<input class="check-box" data-val="true" data-val-required="The Remember Me ? field is required." id="RememberMe" name="RememberMe" type="checkbox" value="true" />
<input name="RememberMe" type="hidden" value="false" />

隐藏字段具有相同的name="RememberMe"。我不知道为什么这个隐藏领域的目的是什么。

当我在服务器端调试并选中复选框时,模型已正确映射。我得到了:myModel.RememberMe = true。但是当我检查Request["RememberMe"]时。我看到了"true,false"false必须来自隐藏字段,因为它们具有相同的名称。

我的问题是:

  • false会导致问题吗?
  • 为什么asp.net mvc呈现这样的隐藏字段?
  • 如果隐藏字段不是必需的。我怎么能摆脱它?我认为最好只为"true"获得Request["RememberMe"]

谢谢

1 个答案:

答案 0 :(得分:1)

错误会导致问题吗?

false不会导致任何问题但是因为你渲染不为null意味着你的RememberMe被设置为bool而不是nulabble bull因此如果没有检查答案它将是假的

为什么asp.net mvc呈现这样的隐藏字段?

因为如果你查看你的html,你不能有两个值,无论是true还是false,但由于null不是,所以添加了回答隐藏字段以保存false value="false"

的值

如果隐藏字段不是必需的。我怎么能摆脱它?我认为最好只为Request["RememberMe"].

获得“真实”

除非你真的认为这是一个问题,你可能不得不编写自己的复选框助手,因为据我所知,使用的复选框助手不会接受无效值作为输入