从占用视图状态中的空间中删除用户控件

本文关键字:删除 用户 控件 空间 视图状态 | 更新日期: 2023-09-27 18:34:39

我有一个管理员和会员页面。两者共享同一页面。唯一的区别是管理员看到一个用户控件与成员分开。目前我正在这样做:

ucControl.Visible = false;

对于会员。这行得通。但它的效率非常低。它查询数据库并遵循正常的生命周期,并且确实占用了ViewState中的空间。我如何获得它并使其更有效率,以便它不会查询数据库并且不会不必要地占用 ViewState 中的空间。

从占用视图状态中的空间中删除用户控件

Make

EnableViewState = "false"

对于此控件。我也会禁用此控件,除了使它们不可见。

使用占位符并动态加载控件 - 唯一的问题是,如果您需要使用回发并记住数据,那么它就会开始变得有点棘手。

只需将代码添加到用户控件,该代码仅在可见时查询数据库等。

您可能希望在 Init 阶段设置ucControl.Visible - 大概您在此阶段知道用户是成员还是管理员。 然后,您只需在用户控件的Page_Load中测试可见性即可。

在回答评论时:

是的,我正在将其设置为初始化阶段并检查可见性。我是否也在page_load本身中禁用视图状态?如果我发现用户是会员?

如果用户是成员(即控件不可见(,则不要执行任何操作。 这样,用户控件就不会对视图状态做出贡献:

// inside the UserControl's Page_Load method
if (this.Visible)
{
    // The user is an Admin, do whatever is needed (access database, databind, ...)
    ...
}
else
{
    // The user is a Member, this UserControl is not used, do nothing.
}