我使用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">