为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.Net MVC Html.HiddenFor具有错误的值

ASP.Net MVC Html.HiddenFor具有错误的值

aluckdog 2019-10-26 11:08:20
我在项目中使用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 %>" />


查看完整回答
反对 回复 2019-10-26
?
三国纷争

TA贡献1804条经验 获得超7个赞

在编写向导时会遇到相同的问题,该向导在每个步骤都显示较大模型的不同部分。

来自“第1步”的数据和/或错误将与“第2步”混合,以此类推,直到我最终意识到ModelState被“怪罪”。


这是我的简单解决方案:


if (oldPageIndex != newPageIndex)

{

    ModelState.Clear(); // <-- solution

}


return View(model[newPageIndex]);


查看完整回答
反对 回复 2019-10-26
  • 3 回答
  • 0 关注
  • 540 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信