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.