从ViewState中占用空间中删除用户控件

时间:2012-05-18 10:42:18

标签: c# asp.net viewstate web-controls

我有一种管理员和会员页面。两者共享同一页面。唯一的区别是Admin看到一个UserControl与会员更加分开。目前我这样做:

ucControl.Visible = false;

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

3 个答案:

答案 0 :(得分:0)

EnableViewState = "false"

用于此控件。 除了让它们不可见外,我还会禁用此控件。

答案 1 :(得分:0)

只需向UserControl添加代码,该代码仅在可见的情况下查询db等。

您可能希望在初始阶段设置ucControl.Visible - 可能您在此阶段知道用户是会员还是管理员。然后,您只需在UserControl的Page_Load中测试可见性。

回答评论:

  

是的我在Init阶段设置它并检查可见性。我是否还在page_load中禁用了viewstate?如果我发现用户是会员?

如果用户是成员(即控件不可见),则不要做任何事情。这样,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.
}

答案 2 :(得分:0)

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