如何用ASP.Net MVC制作一个向导

我们的网站有多个“向导”,其中多个页面收集各种数据,直到最后一步才能提交到数据库。

使用ASP.Net MVC制作向导的最佳/正确的方法是什么?

编辑:我的老板现在说“没有JavaScript” – 关于如何解决这个限制的任何想法?

我不相信有一个最好的/正确的方式,但我会做的方式是…

每个向导都有自己的页面。 每一步都有自己的div。 所有的步骤都是相同的forms。

上一个/下一个button本质上会在进程的每一步中隐藏/显示div。 最后一步的提交button提交整个表单。 使用jQuery来实现这个function是非常简单的,而且所有的向导步骤都在一个ViewPage中,所以很容易维护。

在控制器方面,您将有两个控制器方法,即HttpVerbs.Get版本,它将准备用于查看的表单以及HttpVerbs.Post版本,该版本将采用FormsResult并parsing它以获取提交用户答案所需的信息存储/其他进程。


哇,你的老板很臭。

这个答案几乎优雅地适用于JavaScript禁用的那些******(是的,他们两个)。 你可以调整它来隐藏通过CSS的下一个button,并取消隐藏你的JavaScript代码。 这样javascript用户可以看到向导和没有javascript的人会看到整个表单(没有next / prevbutton)。

另一个选项是为向导中的每个步骤创build一个视图。 您可以将表单的中间结果存储在会话中。 这样做需要花费大量的时间和精力来实施,这意味着当你演示的时候,你可能会挤掉你的老板的一些加class时间,在午餐时间花费大约二十分钟的时间,JavaScript路线是多么容易实现。

如果您不能使用JavaScript,则使用控制器中的方法使每个步骤成为一个视图,并将数据保留在会话中,直到准备好提交到数据库。

您可以使用ActionLink HtmlHelper方法创build您的Next和Prevbutton。

另一种方法是使用向导将不完整的对象保存到数据库,并将主键传递给向导的下一步。 我知道这意味着您需要使某些数据库字段可以为空,但是它具有可以将主键保存在cookie中的附加优势,并允许用户稍后再次返回向导。 这个选项不需要JavaScript或会话状态。

使不同的面板都是客户端…都在同一个表单中…当最后一个提交button被按下时,你可以同时发布所有的值。

如果您不能使用Javascript,也不想使用Sessionvariables来使用服务器资源,那么您还可以在不同的步骤中对input的值进行序列化和反序列化,并使用隐藏的input字段来回传递。 有点像ASP.NET Webforms中的ViewState。

我把一个login向导放在一起,并logging在我的博客背后的想法,如果这有帮助: 链接文本

你可以使用NuGet上的简单组件MVCWizard.Wizard。 WizardController允许您使用局部视图创build向导。 还有一个AutoWizardController在整个视图中呈现整个向导。 所有这些组件都使用会话来存储模型状态。

在这个问题中有一个非常简单,灵活和可扩展的方法: 如何在ASP.NET MVC中简化状态交错modal dialog