我在项目中使用MVC 3,并且看到了一个非常奇怪的行为。我正在尝试为模型上的特定值创建一个隐藏字段,问题是由于某种原因,在字段上设置的值与模型中的值不对应。例如我有以下代码,作为测试:<%:Html.Hidden("Step2", Model.Step) %><%:Html.HiddenFor(m => m.Step) %>我认为这两个隐藏字段将具有相同的值。我要做的是,在第一次显示“视图”时将该值设置为1,然后在提交后将“模型”字段的值增加1。因此,我第一次呈现页面时两个控件的值均为1,但是第二次呈现的值分别为:<input id="Step2" name="Step2" type="hidden" value="2" /><input id="Step" name="Step" type="hidden" value="1" />如您所见,第一个值是正确的,但是第二个值似乎与我第一次显示View相同。我想念什么?* For HTML帮助程序是否以某种方式缓存值?如果是这样,如何禁用此缓存?谢谢你的帮助。
3 回答
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
这很正常,这就是HTML助手的工作方式。他们首先使用POST请求的值,然后使用模型中的值。这意味着,即使您在控制器操作中修改了模型的值(如果POST请求中存在相同的变量),您的修改也将被忽略,并将使用POSTed的值。
一种可能的解决方法是在试图修改值的控制器操作中,从模型状态中删除该值:
// remove the Step variable from the model state
// if you want the changes in the model to be
// taken into account
ModelState.Remove("Step");
model.Step = 2;
另一种可能性是编写自定义HTML帮助程序,该帮助程序将始终使用模型的值而忽略POST值。
还有另一种可能性:
<input type="hidden" name="Step" value="<%: Model.Step %>" />
三国纷争
TA贡献1804条经验 获得超7个赞
在编写向导时会遇到相同的问题,该向导在每个步骤都显示较大模型的不同部分。
来自“第1步”的数据和/或错误将与“第2步”混合,以此类推,直到我最终意识到ModelState被“怪罪”。
这是我的简单解决方案:
if (oldPageIndex != newPageIndex)
{
ModelState.Clear(); // <-- solution
}
return View(model[newPageIndex]);
- 3 回答
- 0 关注
- 540 浏览
添加回答
举报
0/150
提交
取消