ASP.NET MVC 4 не обновлял свойства модели в @Html.TextBoxFor()


У меня есть некоторые странные ошибки при отображении модели. Я создаю что-то вроде чата. Пользователи, отправляющие сообщения между вами. Когда пользователь выбрал одно сообщение в своем почтовом ящике и нажал на кнопку "Ответить", например, отправить форму отправки (). Затем отображается информация о выбранном сообщении.

И в этот момент у меня проблема. Если поля, это отображает свойства сообщения @Html.DisplayFor(), все отлично работает. Информация о сообщении обновляется с изменением выбранного сообщения. Но если свойства отображаются с @Html.TextAreaFor или Html.TextBox для этого не произошло с изменением выбранного сообщения.

И, если пользователь нажал на кнопку "просмотр", какая модель отображения в @Html.DisplayFor()модель отображения обновления и обновления в @Html.DisplayFor() много много раз. И как только нажмем кнопку "Ответить", т.е. модель дипалы в @Html.TextBoxFor()модель перестала обновлять отображение при изменении выбранного сообщения.

Я нарисовал изображение, для облегчения понимания.:)

Большое большое спасибо!

1 ответ

Решение

Я предполагаю, что вы изменяете значение, которое вы связали TextBoxFor в действии HttpPost:

[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);
}
Другие вопросы по тегам