【MVC5】后台修改的Model值反映不到客户端的问题

时间:2021-12-25 18:51:50

画面上的检索结果有翻页功能,就在画面上追加了几个隐藏控件保存上次检索时的检索条件。

检索时更新这些隐藏控件的值,Debug时确实把Model中对应的属性值变掉了,但是到了客户端又变回之前的值了。

百思不解之际终于搜到了一篇文章《[ASP.NET MVC] Post後 return View(model) 時,須加ModelState.Clear();

View

@Html.HiddenFor(m => m.id)
@Model.id
@Html.TextBoxFor(m=>m.id)

Controller

[HttpPost]
public ActionResult Edit(UserModel model)
{
model.id = ""; // 賦予新的值
return View(model);
}

上面的代码运行后,@Model.id的值更新了,但是Hidden和TextBox的值均没有更新。

原因在于ModelState中的值没有被更新,要想更新到画面上需要从ModelState中删除该项,或者清除ModelState。

ModelState.Remove("id");    // 从ModelState中删除该项

或者

ModelState.Clear();    // 清除ModelState(不建议使用,会清除所有的模型状态,包括错误消息等)

已同步到【MVC5】ASP.NET MVC 项目笔记汇总