代码改变世界

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

2015-10-27 11:45 by JiaJia.Oct, ... 阅读, ... 评论, 收藏, 编辑

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

检索时更新这些隐藏控件的值,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 = "123456";  // 賦予新的值
     return View(model);
}

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

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

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

或者

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

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