ASP.NET MVC3 снова заполните форму после публикации, используя FormCollection - PullRequest
2 голосов
/ 18 мая 2011

Итак, у меня есть контроллер, который проверяет правильность ввода в моей форме.Если это не так, он помещает сообщение об ошибке в ViewBag и возвращает представление.Вот так (неважно, что пропущено):

var name = formCollection.Get(cr.Category.name + "-name-" + i).Trim();
var dateOfBirth = formCollection.Get(cr.Category.name + "-dateOfBirth-" + i).Trim();
var passportno= formCollection.Get(cr.Category.name + "-passportno-" + i).Trim();

if (name.Equals("") || dateOfBirth.Equals("") || passportno.Equals(""))
{
     ViewBag.ErrorMessage = "Please fill in all required fields at " + cr.Category.naam;
     return View("BulletinForm3");
}

И мой взгляд выглядит так (неважно, что пропущено):

<input name="@(cr.Category.naam)-name-@i" value="" />
<input name="@(cr.Category.naam)-dateOfBirth-@i" value="" />
<input name="@(cr.Category.naam)-passportno-@i" value="" />

@if (ViewBag.ErrorMessage != null)
{
     <p class="error">@ViewBag.ErrorMessage</p>
}

Так что же происходит, когда вы забыли заполнитьОбязательное поле?Он возвращает представление и отображает сообщение об ошибке, НО все поля, которые уже были заполнены, снова пусты ... Итак, я хочу использовать FormCollection, чтобы заполнить их обратно после того, как он вернет представление.Я поместил FormCollection в ViewBag следующим образом:

ViewBag.ErrorMessage = "Please fill in all required fields at " + cr.Category.naam;
ViewBag.FormCollection = formCollection;
return View("BulletinForm3");

И изменил это в представлении:

<input name="@(cr.Category.naam)-name-@i" value="@if (ViewBag.FormCollection != null) { ((FormCollection)ViewBag.FormCollection).Get(cr.Category.naam + "-name-" + i);}" />

Однако он не заполняет поля ввода значениямиFormCollection ... FormCollection не является пустым (проверено) и имена совпадают (счетчик (i) не меняется или что-то).Что я делаю не так?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Я думаю об этом как о цикличности.

Когда я использую представление для создания, я отправляю в пустом представлении модель

return View("_CreateUserForm", new CreateUserViewModel());

Я использую html helper "для"методы для написания формы, которая заполняет элемент управления, если есть значение (или значение по умолчанию)

@Html.CheckBoxFor(m => m.FindCriteria.TermsHaveBeenAccepted)
@Html.HiddenFor(m => m.MyHiddenValue)

При обратной передаче mvc автоматически заполняет мою модель на основе значений формы

ActionResult SaveNewUser(
  [Bind(Prefix = "")] CreateUserViewModel editUserViewModel)

При ошибке (проверки) я могу отправить эту модель на мой взгляд, и она заполнит элементы управления для меня

return View("_CreateUserForm", editUserViewModel);
0 голосов
/ 18 мая 2011

Поскольку я не мог найти решение, я решил использовать проверку Javascript вместо проверки в контроллере. Теперь нет обратной передачи, поэтому нет необходимости заполнять поля снова.

...