我有一个简单的asp.net MVC 3应用程序,其页面具有表单和@ Html.Hidden(“ hiddenField”)。我正在通过JavaScript修改hiddenField的值,当表单根据输入提交时,我可能必须返回相同的View,但是当我执行该操作时,隐藏字段将使用帖子中的值预先填充。
这怎么可能。据我了解,程序员完全有责任使用asp.net MVC维护状态。还是Helper类根据请求值自动设置值?
最佳答案
这是因为在绑定HTML助手时,首先在ModelState中使用值,然后在模型中使用值。因此,如果您打算在发布的POST控制器操作中修改值,则需要将其从模型状态中删除。例:
[HttpPost]
public ActionResult Index(MyViewModel model)
{
ModelState.Remove("SomePropertyThatYouWantToModify");
model.SomePropertyThatYouWantToModify = "some new value";
return View(model);
}
现在,您的
@Html.HiddenFor(x => x.SomePropertyThatYouWantToModify)
将呈现新值。对于我的回答的完整性,如果您使用的是ViewData(但我真的希望您没有):
[HttpPost]
public ActionResult Index(FormCollection form)
{
ModelState.Remove("SomePropertyThatYouWantToModify");
ViewData["SomePropertyThatYouWantToModify"] = "some new value";
return View();
}
并且您认为
@Html.Hidden("SomePropertyThatYouWantToModify")
应该呈现新值。