所以我做的是,我有一个控制器,检查我的表单中的输入是否正确。如果不是,它会在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)不会更改或东西)。 我做错了什么?
提前致谢
答案 0 :(得分:2)
我认为这是一个周期性的事情。
当我使用视图进行创建时,我发送一个空视图模型
return View("_CreateUserForm", new CreateUserViewModel());
我使用html帮助器“for”方法来编写表单,如果有值(或默认值),则填充控件
@Html.CheckBoxFor(m => m.FindCriteria.TermsHaveBeenAccepted)
@Html.HiddenFor(m => m.MyHiddenValue)
在回发后,mvc根据表单值自动填充我的模型
ActionResult SaveNewUser(
[Bind(Prefix = "")] CreateUserViewModel editUserViewModel)
开启(验证)错误,我可以将此模型发送到我的视图,它将为我填充控件
return View("_CreateUserForm", editUserViewModel);
答案 1 :(得分:0)
由于我找不到解决方案,我决定使用Javascript验证而不是在控制器中验证。现在,没有回发,因此无需再次填写字段。