【发布时间】:2013-03-10 00:37:03
【问题描述】:
我有一个多步骤注册表:
第 1 页(电子邮件)-> 第 2 页(姓名)-> 第 3 页(成功)
在我的第 1 页上,可以通过查询字符串预先填充电子邮件字段。
问题出在第 2 页上,如果名称字段为空并提交,我无法显示验证错误。
如果我将所需属性应用于第 2 页模型的名称字段,则第 1 页 -> 第 2 页调用将始终失败。所以我取出了所需的属性并为第 3 页创建了一个重复的视图模型,与第 2 页相同,但名称上有所需的属性。现在第 3 页可以检测名称是否为空且模型无效,所以此时我重定向回第 2 页,但第 2 页的视图不会显示名称字段周围的验证错误。
我能做什么?
ViewModel 代码:
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");
}
}
【问题讨论】:
-
为什么不将 page2/Index 发布到 page2/Step2?您可以在发布值时检查模型状态,如果有任何问题,请返回 View("Index", ViewModel)。如果没有错误,则重定向到第3页,
-
不确定我是否理解您对 page2/index 到 page2/step2 的建议
-
@newbie:我重新格式化了您问题中的代码,因为如果不是很清楚,您很容易错过其中的某些部分。
标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4