我在显示模型时遇到一些奇怪的错误。我正在创建像聊天这样的东西。用户在自己之间发送消息。当用户在其收件箱中选择了一条消息,并且单击了“答案”按钮时,例如,表单发送提交()。然后显示有关所选消息的信息。
在这一刻我有一个问题。如果显示消息属性的字段为@Html.DisplayFor()
,则一切正常。通过更改所选消息刷新消息的信息。但是,如果显示带有@Html.TextAreaFor
或Html.TextBoxFor的属性未通过更改所选消息而发生。
并且,如果用户点击“查看”按钮,@Html.DisplayFor()
中的哪个显示模型
模型显示刷新,并在@Html.DisplayFor()
多次刷新。只要单击“答案”按钮,即@Html.TextBoxFor()
中的dipaly模型,模型就会停止以刷新显示更改所选消息。
我画了一张图片,以便于理解。 :)
答案 0 :(得分:2)
我猜你正在修改你在HttpPost动作上绑定TextBoxFor的值:
[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
model.SomeProperty = "some new value";
return View(model);
}
在视图中你有:
@Html.TextBoxFor(x => x.SomeProperty)
如果是这样,那么这是设计的。 HTML输入助手(例如TextBoxFor,TextAreaFor,CheckBoxFor,...)在渲染其值时首先在ModelState中查找,并且仅在模型本身之后查看。因此,如果您打算在POST操作中修改某些模型属性,请确保将其从ModelState中删除:
[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
ModelState.Remove("SomeProperty");
model.SomeProperty = "some new value";
return View(model);
}