【发布时间】:2016-04-25 12:53:22
【问题描述】:
我目前正在处理一个非常大的表格。我认为通过实现表单向导(多个视图/操作结果)来划分表单以改善用户体验是一个好主意。
一个要求是用户必须完成一个小型资格测试,以确保他们在启动应用程序向导之前满足最低要求。
在我只能看到解决此问题的一种方法之前没有做任何类似的事情,那就是在确定用户是否可以访问表单向导视图的会话中使用标志,例如 IsEligible。假设我的控制器有两个 ActionResult(Eligibility 和 WizardStepOne),它们分别服务于不同的视图。例如:
控制器 - 未经测试的代码
public ActionResult Eligibility()
{
Return View();
}
[HttpPost]
public ActionResult Eligibility(EligibilityViewModel model)
{
if(!ModelState.IsValid)
{
return View(model);
}
Session["IsEligible"] = true;
return("Success");
}
public ActionResult WizardStepOne()
{
bool stuff = (bool)Session["stuff"];
if(IsEligible == null)
{
return("Eligibility");
}
return RedirectToAction("Eligibility");
}
简而言之,如果用户尝试访问向导的第一步,并且 Eligibility post 操作未设置 IsEligible 标志,则用户将被重定向回资格表单。
我也研究了动作过滤器,但不太明白。我还必须在稍后阶段实现此功能,以防止用户使用 url 在向导步骤之间跳过,例如跳过 WizardStepOne 并从 WizardStepTwo 开始。
在这种情况下,是否有比上述方法更好的方法?我宁愿避免使用会话,因为重新启动表单会出现问题,因为它需要重新启动按钮才能放弃会话,尤其是在向导步骤之间。
【问题讨论】:
标签: c# asp.net asp.net-mvc session actionresult