如何更新文本框的值@ Html.TextBoxFor(M => m.MvcGridModel.

2019-07-30 06:49发布

我有问题,该文本框的值不会与在模型中的新值更新。 @ Html.TextBoxFor(M => m.MvcGridModel.Rows [j]的.ID)

首先,收集MvcGridModel.Rows得到填充了一些数据,那么当按下按钮,并提交获得新的数据成功的形式,但它不会更新文本框的值。

你有什么想法? 感谢ü提前

Answer 1:

这是因为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");
}


文章来源: How to update the textbox value @Html.TextBoxFor(m => m.MvcGridModel.Rows[j].Id)