我正在使用asp.net mvc 2.0和jqModal来设置模态向导。
我根据所选的初始窗口小部件类型有不同数量的页面。
我最初的头脑风暴努力就是使用如下的枚举:
public enum WizardSetup
{
Start,
Page1,
Page2,
Finish
}
你如何翻阅枚举?再次,可能存在或可能不存在基于所选择的窗口小部件的页面2。因此,在用户界面中会有一个后退,下一步和完成按钮来循环浏览页面。
我想到了不同页面的用户控件,并使用jqModal的ajax来加载不同的页面。
关于最好的方法和最简单的方法来做这个分页的任何想法?
答案 0 :(得分:0)
我可以通过几种方式来考虑皮肤多步向导:
使用一些jquery等来遍历页面上已存在的div。隐藏当前未激活的那些。这是最微不足道的,但不会在没有js的情况下优雅地降级。对于动态的页面树也不会很好。从好的方面来说,你不会试图在不同的行动之间传递状态。
为向导的每个步骤使用ajax表单,并将下一个按钮连接到生成相应下一步的操作。在这些操作之间传递视图模型很棘手。您必须使用表单上的隐藏字段,或者像MVC Futures中的Html.Serialize()之类的东西来传递整个视图模型对象(可能更好,除非它只有几个字段)。如果您正在使用该问题并且让操作在每一步都接收到视图模型对象,那么您将遇到验证问题,因为它将尝试验证您所在向导步骤中尚未设置的字段。这可以使用ActionFilter来解决与您所在步骤无关的字段的错误。关于这种方法的好处是,如果你使用一个像样的ajax库(甚至ms不显眼的ajax),它可以在没有js的情况下工作。
创建使用json有效负载来回制作的手工制作的东西。因为您将使用js构建表单客户端,所以需要付出很多努力。
与2类似,但将状态存储在会话变量(使用多服务器进行扩展probs)或存储在数据库等中。每次都需要在浏览器中来回进行编组。
< / LI> 醇>当然,如果你不需要在向导步骤之间传递状态,那就容易多了。
史蒂夫·桑德森在Pro Asp.Net MVC2一书中有很好的工作,虽然现在有点过时了,它使用的动作过滤器不需要Html.Serialize在mvc3中工作的方式期货(可以反序列化为行动方法)。
不幸的是,多步向导有点痛苦,因为它们本质上是有状态的,这几乎是Web技术所追求的相反目标。