ASP.NET MVC3在使用FormCollection发布后再次填写表单

时间:2011-05-18 10:22:44

标签: asp.net asp.net-mvc-3 formcollection

所以我做的是,我有一个控制器,检查我的表单中的输入是否正确。如果不是,它会在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 个答案:

答案 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验证而不是在控制器中验证。现在,没有回发,因此无需再次填写字段。