Как сохранить значения полей в форме ASP.NET MVC, если она была признана недействительной? - PullRequest
1 голос
/ 14 августа 2010

У меня есть форма, которая проходит проверку перед отправкой электронного письма.

Я попытался использовать это для проверки, где метод ValidateInput устанавливает ModelState в зависимости от ввода:

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    ValidateInput(collection);
    if (ModelState.IsValid == false) return View(collection);

Это очищает все введенные поля, если что-то неверно. Я хочу сохранить все введенные данные в поле. Как я могу это сделать?

Ответы [ 3 ]

6 голосов
/ 15 августа 2010

Используете ли вы Html-помощники для поля ввода в форме или обычные HTML-теги?

<%: Html.TextBoxFor(x => x.Message) %> - original value will be kept
<input type="text" name="Message" /> - original value will be lost after postback

Также вы можете воспользоваться встроенной проверкой (с атрибутами аннотации данных) вместо использования собственного метода проверки.

1 голос
/ 14 августа 2010

AFAIK, вам не нужно вызывать ValidateInput самостоятельно в методе Create - фреймворк уже установил ModelState для вас, поэтому просто удалите первую строку.

0 голосов
/ 14 августа 2010

Если вы не можете изменить метод ValidateInput, чтобы не стирать ваши свойства в этом сценарии, тогда вам действительно понадобятся две копии данных формы, одна для передачи этому методу и одна в резерве для передачи в представление при проверкетерпит неудачу.
Возможно, лучше использовать конкретную модель представления для представления действий, а не полагаться на объект FormCollection.Таким образом, вы можете использовать привязку модели для извлечения данных.
Я думаю, что приведенный ниже код должен работать, но у меня не было возможности протестировать его, так что будьте осторожны!

[HttpPost]
public ActionResult Create(MyCreateViewModel collection)
{
    MyCreateViewModel myCVM = new MyCreateViewModel();
    TryUpdateModel(myCVM);
    ValidateInput(myCVM);
    if (ModelState.IsValid == false) return View(collection);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...