画面上的检索结果有翻页功能,就在画面上追加了几个隐藏控件保存上次检索时的检索条件。
检索时更新这些隐藏控件的值,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(不建议使用,会清除所有的模型状态,包括错误消息等)