我有一个多步骤注册表单:
第 1 页(电子邮件)-> 第 2 页(姓名)-> 第 3 页(成功)
在我的第 1 页上,可以通过查询字符串预先填充电子邮件字段。
问题出在第 2 页上,如果名称字段为空并提交,我将无法显示验证错误。
如果我将所需属性应用于第 2 页模型的名称字段,则第 1 页 -> 第 2 页调用将始终失败。所以我取出了所需的属性并为第 3 页创建了一个重复的视图模型,与第 2 页相同,但名称上有所需的属性。现在第 3 页可以检测名称是否为空且模型无效,因此此时我重定向回第 2 页,但第 2 页上的视图不会显示名称字段周围的验证错误。
我能做些什么 ?
视图模型代码:
public Class StepOneViewModel
{
[Required]
public string Email{ get; set; }
}
public Class StepTwoViewModel
{
[Required]
public string Email{ get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public Class StepTwoViewModelPOST
{
[Required]
public string Email{ get; set; }
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }
}
控制器代码:
public ActionResult Step1(string email)
{
return View();
}
[HttpPost]
public ActionResult Step1(StepOneViewModel viewModel)
{
if (!ModelState.IsValid)
return View();
else
return RedirectToAction("Step2", viewModel);
}
public ActionResult Step2(StepTwoViewModel viewModel)
{
if (!ModelState.IsValid)
return RedirectToAction("Step1", viewModel);
else
{
return View(viewModel);
}
}
[HttpPost]
public ActionResult Step2(StepTwoViewModelPOST viewModel)
{
if (!ModelState.IsValid)
return RedirectToAction("Step1", viewModel);
else
{
return Content("Success");
}
}