Html.HiddenFor在同一视图上输出两个不同的值

时间:2014-02-27 13:20:31

标签: model-view-controller html-helper

我经常使用HiddenFor Html Helper将隐藏元素输出到我的视图中,如下所示:

      <%: Html.HiddenFor(model => model.SourceType) %>

在一个视图上,我无法弄清楚为什么,我注意到类型输入的值=“”是这样的空白:

      <input id="SourceType" type="hidden" value="" name="SourceType">

在排除故障时,我只需使用TextBoxFor输出值,并获得所需的值。

      <%: Html.TextBoxFor(model => model.SourceType) %>

这是事情变得有点奇怪的地方。我正在阅读帖子并尝试不同的标记。我最终得到了这个标记,看看会发生什么:

      <%: Html.HiddenFor(model => model.SourceType) %>
      <%: Html.HiddenFor(model => model.SourceType) %>

生成的html是这样的:

      <input id="SourceType" type="hidden" value="" name="SourceType">
      <input id="SourceType" type="hidden" value="0" name="SourceType">

这看起来很奇怪。在Get请求中,两个相同的hiddenfor帮助程序如何在同一视图上使用相同的Model会产生两个不同的值?

编辑:

我认为它可能是第一个元素总是空白所以我在这两个隐藏元素之前添加了TextBoxFor:

      <%: Html.TextBoxFor(model => model.SourceType) %>
      <%: Html.HiddenFor(model => model.SourceType) %>
      <%: Html.HiddenFor(model => model.SourceType) %>

这导致:

      <input id="SourceType" type="text" value="0" name="SourceType">
      <input id="SourceType" type="hidden" value="0" name="SourceType">
      <input id="SourceType" type="hidden" value="0" name="SourceType">

现在这三个都是正确的。当首先输出时,似乎只有第一个HiddenFor是空白的。如果该值由HiddenFor以外的其他内容引用,则它可以正常工作。咦?

我只是通过从页面中删除它们来确保我的脚本都没有影响该值。 First Hidden仍然是空白......

总结一下:

  1. 隐藏的帮助
  2. 的值为空
  3. 当hidden for是触及模型属性的第一个助手时
  4. 使用&lt;%Model.Type%&gt;在隐藏for helper之前引用/输出model属性时和/或&lt;%:Html.TextBoxFor(model =&gt; model.Type)%&gt;后续隐藏输入中的值由隐藏的帮助程序正确输出。
  5. 这必须意味着在引用属性时Model或ModelState会发生某些事情。 HiddenFor帮助器可以找到什么,直到其他东西触及该属性后才能找到它?

0 个答案:

没有答案