TextBoxFor Helper сохраняет предыдущее значение, даже если значение модели пустое
У меня есть форма MVC для добавления простого объекта. Я использую TextBoxFor (model = > model.FieldName) для создания полей ввода. У меня есть кнопка "Сохранить" и кнопка "Сохранить и новое". Кнопка "Сохранить и новое" должна отправить сообщение обратно в действие "Сохранить", а затем вернуть текущий вид с пустой моделью, чтобы пользователь мог добавить другой объект. Однако происходит то, что, хотя модель действительно пуста, поля ввода генерируются со значениями, введенными для предыдущего объекта. Надеюсь, это имеет смысл.
Я знаю, что могу сделать перенаправление, но это похоже на уродливое обходное решение, поэтому, если кто-то сталкивался с этим раньше, я бы очень признателен за ввод.
Спасибо.
Ответы
Ответ 1
Проблема в том, что ваш ViewData.ModelState
по-прежнему заполняется значениями из исходного сообщения, даже если Model
имеет значение null, и вы явно не передаете какие-либо значения в свое представление.
На самом деле я не думаю, что перенаправление на исходное действие является уродливым решением, но если вы не хотите этого делать, то очистка ViewData
должна работать для вас:
[HttpPost]
public ActionResult Save(TestModel model)
{
ViewData = null;
return View();
}
Ответ 2
Я бы предложил использовать
ModelState.Clear();
вместо
ViewData = null;
так как я нахожу, что гораздо более ясно, что вы пытаетесь сделать. Хотя оба будут выполнять то, что вы пытаетесь сделать.
Ответ 3
У меня была такая же проблема:
Обновление поставщика значений до TryUpdateModel
Однако - после публикации - если это успешно, вы должны по дизайну перенаправить на действие GET для своих следующих данных. Это часть шаблона PRG (post-redirect-get), который предназначен для использования mvc. Помощники предполагают, что вы используете этот шаблон, и если вы показываете информацию после сообщения, должна быть ошибка, поэтому они повторно отображают опубликованные значения для "исправления". Попытайтесь не обойти это, но отредактируйте свой код, чтобы правильно работать с PRG.