我有一种管理员和会员页面。两者共享同一页面。唯一的区别是Admin看到一个UserControl与会员更加分开。目前我这样做:
ucControl.Visible = false;
对于会员。这有效。但效率很低。它查询数据库并遵循正常的生命周期,它确实占用了ViewState中的空间。我如何得到它并使其更有效,因此它不会查询数据库,也不会不必要地占用ViewState中的空间。
答案 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)
使用占位符并动态加载控件 - 唯一的麻烦就是如果你需要使用回发并记住数据,那么它开始变得有点棘手。