MVC - Как изменить значение текстового поля в посте? - PullRequest
4 голосов
/ 31 марта 2009

После того, как пользователь нажимает кнопку отправки на моей странице, появляется текстовое поле, которое проверяется, и если оно недействительно, я показываю сообщение об ошибке, используя метод ModelState.AddModelError. И мне нужно заменить значение этого текстового поля и показать страницу с сообщениями об ошибках обратно пользователю.

Проблема в том, что я не могу изменить значение текстового поля, я пытаюсь сделать ViewData["textbox"] = "new value";, но оно игнорируется ...

Как я могу это сделать?

спасибо

Ответы [ 3 ]

6 голосов
/ 21 июня 2013

Вы можете использовать ModelState.Remove (nameOfProperty) как:

ModelState.Remove("CustomerId");
model.CustomerId = 123;
return View(model);

Это будет работать.

5 голосов
/ 31 марта 2009

Я тоже не знал ответа, проверил вокруг объекта ModelState и нашел:

ModelState.SetModelValue()

У моей модели есть свойство Name, которое я проверяю, если оно недопустимо, это происходит:

ModelState.AddModelError("Name", "Name is required.");
ModelState.SetModelValue("Name", new ValueProviderResult("Some string",string.Empty,new CultureInfo("en-US")));

Это сработало для меня.

1 голос
/ 30 мая 2012

У меня есть ситуация, когда я хочу сохранить скрытое значение между POST для контроллера. Скрытое значение изменяется по мере изменения других значений. Я не смог получить скрытый элемент для обновления без обновления значения вручную в ModelState.

Мне не понравился этот подход, так как было странно не использовать строго типизированную ссылку на значение модели.

Я обнаружил, что вызов ModelState.Clear непосредственно перед возвратом результата просмотра работал для меня. Казалось, что он затем выбирает значение из Модели, а не значения, которые были представлены в предыдущем POST.

Я думаю, что, вероятно, будет проблема с этим подходом в ситуациях, когда используются ошибки в ModelState, но в моем сценарии не используются ошибки модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...