我有问题,该文本框的值不会与在模型中的新值更新。 @ Html.TextBoxFor(M => m.MvcGridModel.Rows [j]的.ID)
首先,收集MvcGridModel.Rows得到填充了一些数据,那么当按下按钮,并提交获得新的数据成功的形式,但它不会更新文本框的值。
你有什么想法? 感谢ü提前
我有问题,该文本框的值不会与在模型中的新值更新。 @ Html.TextBoxFor(M => m.MvcGridModel.Rows [j]的.ID)
首先,收集MvcGridModel.Rows得到填充了一些数据,那么当按下按钮,并提交获得新的数据成功的形式,但它不会更新文本框的值。
你有什么想法? 感谢ü提前
这是因为HTML佣工如在ModelState中TextBoxFor先看看结合自己的价值后,才在模型时。 所以,如果你的POST操作您试图修改某个值,这是最初的POST请求你将不得不从ModelState中,以及如果你想这些变化采取的视图效果,删除它的一部分。
例如:
[HttpPost]
public ActionResult Foo(MyViewModel model)
{
// we change the value that was initially posted
model.MvcGridModel.Rows[0].Id = 56;
// we must also remove it from the ModelState if
// we want this change to be reflected in the view
ModelState.Remove("MvcGridModel.Rows[0].Id");
return View(model);
}
此行为是故意的,它是由设计。 这就是例如允许有以下POST操作:
[HttpPost]
public ActionResult Foo(MyViewModel model)
{
// Notice how we are not passing any model at all to the view
return View();
}
然而在视图中你得到了用户在输入字段最初输入的值。
另外还有ModelState.Clear();
方法,你可以使用删除从ModelState中所有的密钥,但要小心,因为这也会删除所有相关的ModelState错误,因此建议删除从ModelState中,你打算你的POST控制器动作中只修改的值。
所有这一切是说,在设计合理的应用程序,你不应该需要这个。 因为你应该使用PRG模式 :
[HttpPost]
public ActionResult Index(MyViewModel model)
{
if (!ModelState.IsValid)
{
// there was some error => redisplay the view without any modifications
// so that the user can fix his errors
return View(model);
}
// at this stage we know that the model is valid.
// We could now pass it to the DAL layer for processing.
...
// after the processing completes successfully we redirect to the GET action
// which in turn will fetch the modifications from the DAL layer and render
// the corresponding view with the updated values.
return RedirectToAction("Index");
}