0

我在显示模型时遇到了一些奇怪的错误。我正在创建类似聊天的东西。用户在你们之间发送消息。当用户在他的收件箱中选择了一条消息,并单击了“答复”按钮,例如,表单发送 submit()。然后显示有关所选消息的信息。

而在这一刻我有一个问题。如果显示消息属性的字段是@Html.DisplayFor(),则一切正常。消息的信息随着所选消息的更改而刷新。但是,如果使用@Html.TextAreaFor或 Html.TextBoxFor 显示的属性不会在更改所选消息时发生。

并且,如果用户单击“查看”按钮,则显示模型中的@Html.DisplayFor() 模型显示刷新,并@Html.DisplayFor()多次刷新。并且只要单击“回答”按钮,即 dipaly 模型 in @Html.TextBoxFor(),模型就会停止以在更改所选消息时刷新显示。

为了便于理解,我画了一张图。:) 在此处输入图像描述

非常感谢!

4

1 回答 1

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);
}
于 2013-07-05T21:17:41.913 回答