0

我有一种管理员和会员页面。两者共享同一页面。唯一的区别是 Admin 看到的 UserControl 与 Member 不同。目前我正在这样做:

ucControl.Visible = false;

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

4

3 回答 3

0

只需将代码添加到仅在可见时查询 db 等的 UserControl。

您可能希望ucControl.Visible在 Init 阶段进行设置 - 大概到此阶段您就知道用户是成员还是管理员。然后,您可以简单地测试 UserControl 的 Page_Load 中的可见性。

回复评论:

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

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

// 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.
}
于 2012-05-18T10:46:50.210 回答
0

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

于 2012-05-18T10:47:33.510 回答
0

制作

EnableViewState = "false"

为此控件。除了使它们不可见之外,我还将禁用此控件。

于 2012-05-18T10:44:39.477 回答