我正在使用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帮助程序隔离。
我这样做了:
<%: 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">
编辑:如果有人能想到尝试的话,我很乐意听到。我已经采取了一项丑陋的工作,涉及在视图模型上添加一个属性的支架。这允许我在控制器中设置属性值中的替换值,该控制器在页面上按预期呈现。在帖子上,我必须手动将属性映射回SourceType属性。啊...
答案 0 :(得分:0)
尝试添加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">
答案 1 :(得分:0)
确保您没有相同属性名称的空querystring参数。 HiddenFor
似乎更喜欢查询字符串中的内容而不是模型中的内容。