我有一种管理员和会员页面。两者共享同一页面。唯一的区别是 Admin 看到的 UserControl 与 Member 不同。目前我正在这样做:
ucControl.Visible = false;
为会员。这行得通。但它的效率非常低。它查询数据库并遵循正常的生命周期,它确实占用了 ViewState 中的空间。我如何得到它并使其更高效,因此它不会查询数据库并且不会不必要地占用 ViewState 中的空间。
我有一种管理员和会员页面。两者共享同一页面。唯一的区别是 Admin 看到的 UserControl 与 Member 不同。目前我正在这样做:
ucControl.Visible = false;
为会员。这行得通。但它的效率非常低。它查询数据库并遵循正常的生命周期,它确实占用了 ViewState 中的空间。我如何得到它并使其更高效,因此它不会查询数据库并且不会不必要地占用 ViewState 中的空间。
只需将代码添加到仅在可见时查询 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.
}
使用占位符并动态加载控件 - 唯一的问题是如果您需要使用回发并记住数据,那么它开始变得有点棘手。
制作
EnableViewState = "false"
为此控件。除了使它们不可见之外,我还将禁用此控件。