【问题标题】:UI pattern to allow user to add item with unlimited sub-itemsUI 模式允许用户添加具有无限子项目的项目
【发布时间】:2010-07-19 08:31:34
【问题描述】:

我正在编写一个 ASP.NET 应用程序。我需要包含一个页面,用户可以在其中添加一个包含多组子项的项目,每组子项的数量都是无限的。子项本身包含 10 到 15 个字段,因此需要相当多的 UI 空间。

作为我的意思的一个例子,用户需要能够将业务记录添加到系统中,包括任意数量的员工记录和任意数量的资产记录。

我通常执行此操作的方式是使用顶部带有一组选项卡的 MultiView 控件。选项卡在 MultiView 的视图之间切换。第一个选项卡用于业务记录,第二个选项卡用于员工记录,第三个选项卡用于资产记录。员工和资产的视图最初是空的,有一个添加新员工(或资产)的按钮。单击此按钮时,页面将被回发,并动态添加用户控件以捕获员工(或资产)的详细信息。

有一个保存按钮可以将整个对象图保存到数据库中。

这对于编程和维护来说是相当复杂的,而且我通常会在为动态用户控件管理 ViewState 时遇到头疼的问题。显然,页面上的 ViewState 也会变得非常大,从而导致页面非常慢。

优点是它是一个非常直观的用户界面,用户可以理解,并且用户可以在将任何内容保存到数据库之前添加所有内容并检查所有内容。

您能否建议您可能为此使用的任何其他 UI 模式以及任何优点或缺点?

谢谢

大卫

【问题讨论】:

    标签: asp.net user-interface design-patterns one-to-many


    【解决方案1】:

    看看 Quince,一个可以帮助您激发灵感的 UX 模式存储库:http://quince.infragistics.com/

    关于视图状态,如果你不做没有状态的MVC,你有没有考虑过以下技巧:

    • 在非上下文元素(即:标签)上禁用 ViewState
    • 通过定义 bzips>base64 编码的自定义处理程序来压缩 ViewState。您最终会为客户端节省的空间量感到惊讶
    • 将视图状态存储在服务器上,创建请求 ID,并将此 ID 绑定到应用程序缓存,并使用到期窗口 = 会话生命周期(非滑动),然后用您的 guid 来回替换视图状态。

    干杯, 弗洛里安

    【讨论】:

    • 感谢 ViewState 提示。
    【解决方案2】:

    我喜欢您使用选项卡在视图之间导航的多视图控件设计。对我来说,我曾经有过大视野的时候,也有过需要绕过一些步骤的时候。您几乎处于向导控件的边缘,但我认为您的每个步骤都过于复杂,无法使用官方向导控件。

    在我的例子中,我将每个视图分成一个特定的网页。使用您的示例,考虑创建三个页面:Business.aspx、Employee.aspx 和 Asset.aspx。如果您有验证 Web 表单的代码,则可以在每个网页中引用它。我这样做是因为在我的情况下,我在每个“步骤”上添加了许多记录。我不想担心必须在每次回帖时正确重新创建视图状态的开销和错误空间。您的 Business.aspx 页面知道如何照顾自己并保持有效,而不必担心有效的员工记录或数据。当我遇到这个问题时,我的多视图模式可以很容易地将视图分成单独的页面。哦,假设有人直接浏览到 Asset.aspx,我会显示一条消息解释用户跳枪,或者制作一个简单的视图表单,让他们在添加资产之前选择相应的资源和/或员工。

    【讨论】:

    • 是的,将用户体验拆分为多个保存是另一种选择。对我来说,缺点是他们在决定是否保存之前没有机会查看整个内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    相关资源
    最近更新 更多