超文本标记语言HiddenFor第一次输出空白值,如果重复输出正确值



我使用MVC 2。当我这样做的时候:

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

我在视图中得到这个:

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

在返回控制器中的视图之前,我确认了模型具有正确的值。正确设置为11

我开始尝试不同的方法,看看是否能得到不同的结果,发现如果我像这样重复文本框:

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

结果如下:

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

有谁能想到为什么视图呈现第一个文本框为空白值,而第二个文本框包含正确的值?

编辑:我认为这可能是由javascript引起的,所以我从页面中删除了所有脚本,但该值第一次仍然是空白的,重复时正确。

编辑:基于jle的链接,我试了这个:

      <input type="hidden" value="<%= Html.AttributeEncode(Model.SourceType) %>" id="SourceType" name="SourceType" />
      <input id="SourceType" type="hidden" value="11" name="SourceType">
      <input id="SourceType" type="hidden" value="11" name="SourceType">

得到这个:

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

另外,根据链接,我在返回视图之前在控制器中尝试了这个:

      ModelState.Clear();

结果仍然相同。要呈现的第一个值为空白。

编辑:这里是控制器代码:
      Source source = SourceService.NewSource();
      return View("Source", Mapper.Map(source, new SourceViewModel()));

编辑:问题似乎与使用HiddenFor helper无关。

我这样做了:

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

得到这个:

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

编辑:根据jle的输入,我尝试了这个,但仍然没有运气:

      <input id="SourceType" type="hidden" value="<%: Model.SourceType %>" name="SourceType">
      <%: Html.HiddenFor(model => model.SourceType) %>
      <%: Html.HiddenFor(model => model.SourceType) %>

结果如下:

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

编辑:如果我在不使用帮助器时排除了名称,并且使用type="text"而不是type="hidden"。这将呈现值,但不会张贴,因为它缺少名称(我认为)。

:

      <input id="SourceType" type="text" value="<%: Model.SourceType %>" style="visibility: hidden;"/>

结果在这个不绑定到模型时张贴?添加名称如何影响值?

      <input id="SourceType" type="text" style="visibility: hidden;" value="11">
编辑:如果有人能想到什么可以尝试的,我很乐意听到。我已经采取了一个丑陋的工作,涉及到在视图模型上添加一个stand in属性。这允许我在控制器中设置站立属性值,使其按照预期在页面上呈现。在张贴,然后我必须手动映射属性回SourceType属性。呃…

确保没有使用相同属性名的空querystring参数。HiddenFor似乎更喜欢查询字符串中的内容而不是模型中的内容。

尝试添加ModelState.Remove("SourceType");在控制器中:

ModelState.Remove("SourceType");
Source source = SourceService.NewSource();
return View("Source", Mapper.Map(source, new SourceViewModel()));

如果ModelState中已经存在与您的值相对应的值,它将首先使用该值。或者,我会再次检查值是否正确映射到ViewModel。当你说你检查了这个,你是检查了模型本身还是只检查了Source属性?

编辑:试试<input id="SourceType" type="hidden" value="<%: Model.SourceType %>" name="SourceType">

相关内容

  • 没有找到相关文章