如何使用ASP.Net MVC制作向导

时间:2008-11-17 22:11:51

标签: c# .net asp.net-mvc wizard

我们的网站有多个“向导”,其中各个页面收集了各种数据,并且在最后一步之前无法提交到数据库。

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

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

8 个答案:

答案 0 :(得分:45)

我不相信有最佳/正确的方式,但我这样做的方式是......

每个向导都有自己的页面。每一步都有自己的div。所有步骤都采用相同的形式。

上一个/下一个按钮实际上会隐藏/显示过程每个步骤中的div。最后一步的提交按钮提交整个表单。使用jQuery实现它是非常简单的,并且它很容易维护,因为所有向导步骤都在一个ViewPage中。

在控制器端,你有两个控制器方法,HttpVerbs.Get版本,它将准备查看表单和HttpVerbs.Post版本,它将采用FormsResult并解析它以获取提交所需的信息用户对存储/其他进程的回答。


哇,你的老板臭了。

这个答案几乎适用于那些禁用javascript的人(是的,两者都有)。您可以调整它以通过CSS隐藏下一个上一个按钮,并在您的javascript代码中取消隐藏它们。这样,使用javascript的人会看到向导,没有javascript的人会看到整个表单(没有next / prev按钮)。

另一个选项是为向导中的每个步骤创建一个视图。您可以在会话中存储表单的中间结果。这种方式需要花费大量的时间和精力来实施,这意味着你可能会在你演示时花费大约20分钟的努力来展示你的老板的一些加班时间,javascript路线的实施是多么容易。

答案 1 :(得分:20)

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

您可以使用ActionLink HtmlHelper方法创建Next和Prev按钮。

答案 2 :(得分:12)

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

答案 3 :(得分:4)

使不同的面板都是客户端...所有都采用相同的形式...当按下最终提交按钮时,您可以同时发布所有值。

答案 4 :(得分:3)

如果您不能使用Javascript并且不希望将服务器资源用于Session变量,您还可以序列化和反序列化在不同步骤中输入的值,并使用隐藏的输入字段来回传递它。有点像ASP.NET Webforms中的ViewState。

答案 5 :(得分:2)

我整理了一个登录向导,并在我的博客上记录了它背后的想法,如果这有帮助:link text

答案 6 :(得分:1)

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

答案 7 :(得分:1)

在这个问题中有一个非常简单,灵活和可扩展的方法:How to simplify my statefull interlaced modal dialogs in ASP.NET MVC