在ASP中动态加载用户控件的最佳实践

时间:2014-03-25 23:32:40

标签: asp.net session user-controls viewstate

我有一个ASP网页,它有52个自定义控件,通过在PreInit例程中加载来维护ViewState

这是一个报告生成器页面,根据哪个报告,最多可以看到5个自定义控件,但不是全部。

例如,

  • 客户报告不需要员工问题。
  • 员工报告不需要客户问题。
  • 但两者都需要日期范围问题。

(这一切都很完美)

BUT ...

我想改为 LOAD ONLY 适合用户运行的报表的控件。 (对我来说这听起来像)我需要存储有关在ViewState中加载的WHICH控件的信息。

问题是...在PreInit例程中没有viewstate,因此我无法使用它来确定要加载的控件。

我的选择是将信息存储在要加载的WHICH控件中:

  1. SessionState的。
  2. 数据库
  3. 网址参数。
  4. 我还没有想到的其他东西。
  5. 每一个都有我自己的需要做的事情。

    (在您看来)最佳做法是什么。

    我的代码(剪辑)

    Private Sub WebForm2_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
    
        ReportOptions.Controls.Add(UserControl1)
        ReportOptions.Controls.Add(UserControl2)
        ReportOptions.Controls.Add(UserControl3)
        Etc...
    
    End Sub
    

    我的HTML(剪辑)

    <div id="ReportOptions" class="ReportOptions" runat="server"/>
    

1 个答案:

答案 0 :(得分:1)

Viewstate不是一个选项,因为您必须完全按原样(控件和所有)重新构建页面,以便在帖子后面正确读取视图状态。

会话sux。 (在asp.net提供程序中单线程)

数据库是沉重的过程。

网址方法是无状态的,可能是您最好的选择。