网页上设置向导的分页机制
本文关键字:分页 机制 设置向导 网页 | 更新日期: 2023-09-27 18:11:34
我使用asp.net mvc 2.0和jqModal来设置一个模态向导。
根据所选择的初始小部件类型,我有可变数量的页面。
我头脑风暴的最初努力是使用像这样的enum:
public enum WizardSetup
{
Start,
Page1,
Page2,
Finish
}
如何在枚举中分页?同样,可能有也可能没有基于所选小部件的页面2。因此,在用户界面中,将有返回、下一步和完成按钮来循环浏览页面。
我想到了不同页面的用户控件,并使用jqModal的ajax来加载不同的页面。
有什么最好和最简单的分页方法吗?
我能想到的几种为多步骤向导添加皮肤的方法:
-
使用一些jquery等来浏览页面上已经存在的div。那些当前不活跃的是隐藏的。这是最微不足道的,但在没有js的情况下不会优雅地降级。也不适用于动态页面树。从好的方面来说,你不会因为试图在不同的动作之间传递状态而感到痛苦。
-
为向导的每个步骤使用ajax表单,并将next按钮连接到生成相应下一步的操作。在这些操作之间传递视图模型是很棘手的。您要么必须在表单上使用隐藏字段,要么像MVC future中的Html.Serialize()一样传递整个视图模型对象(可能更好,除非它只有几个字段)。此外,如果您使用该方法并让操作在每一步都接收视图模型对象,那么您将遇到验证问题,因为它将尝试验证在您所在的向导的步骤中未设置的字段。这可以使用ActionFilter来消除与您所处步骤不相关的字段的错误。这种方法的好处是,如果你使用一个像样的ajax库(甚至是不起眼的ajax),它可以在没有js的情况下工作。
-
创建一些手工制作的东西,使用json来回加载到服务器。这将是很多的努力,因为你将使用js构建表单客户端。
-
类似于2,但将状态存储在会话变量中(多服务器的规模问题)或数据库中等。
当然,如果你不需要在向导步骤之间传递状态,那就容易多了。
有相当好的工作通过2)在Pro Asp。Net MVC2这本书是Steve Sanderson写的,虽然它现在有点过时了,而且它使用了Html不需要的动作过滤器。在mvc3期货中序列化作品(可以反序列化为动作参数方法)。
不幸的是,多步骤向导有点痛苦,因为它们本质上是有状态的,这几乎与web技术所期望的目标相反。