2

所以我要做的是,我有一个控制器来检查表单中的输入是否正确。如果不是,它会在 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)没有改变或其他东西)。我究竟做错了什么?

提前致谢

4

2 回答 2

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);
于 2011-05-18T10:29:48.090 回答
0

由于找不到解决方案,我决定使用 Javascript 验证而不是在控制器中进行验证。现在,没有回发,因此无需再次填写字段。

于 2011-05-18T19:18:15.113 回答