SomePropertyThatYouWantToModify

SomePropertyThatYouWantToModify

我有一个简单的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")应该呈现新值。

09-25 20:31