C# 从ViewState中占用空间中删除用户控件
我有一种管理员和成员页面。两者共享同一页。唯一的区别是Admin看到一个UserControl与成员之间的距离更大。目前我正在这样做:C# 从ViewState中占用空间中删除用户控件,c#,asp.net,viewstate,web-controls,C#,Asp.net,Viewstate,Web Controls,我有一种管理员和成员页面。两者共享同一页。唯一的区别是Admin看到一个UserControl与成员之间的距离更大。目前我正在这样做: ucControl.Visible = false; 各位议员。这很有效。但这是非常低效的。它查询数据库并遵循正常的生命周期,并且在ViewState中占用空间。我如何才能做到这一点,并使它更高效,这样它就不会查询数据库,也不会不必要地占用ViewState中的空间。make EnableViewState = "false" 对于此控件。 我还将禁用这些控
ucControl.Visible = false;
各位议员。这很有效。但这是非常低效的。它查询数据库并遵循正常的生命周期,并且在ViewState中占用空间。我如何才能做到这一点,并使它更高效,这样它就不会查询数据库,也不会不必要地占用ViewState中的空间。make
EnableViewState = "false"
对于此控件。
我还将禁用这些控件,除了使它们不可见。只需向UserControl添加代码,该代码仅在db etc可见时查询 您可能希望在初始化阶段设置
ucControl.Visible
——在这一阶段您可能知道用户是成员还是管理员。然后,您可以简单地在UserControl的页面加载中测试可见性
针对这一评论:
是的,我在初始化阶段设置它并检查可见性。我是否也在页面加载本身中禁用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.
}
使用占位符并动态加载控件-唯一的问题是如果需要使用回发并记住数据,那么它开始变得有点棘手 这不会停止usercontrol的生命周期。是吗?它仍将执行并查询我的数据库。我在UserControl中看到一个名为Dispose的方法。如果我称之为,生命周期将停止,并且在ViewState中也不会占用空间。但是,我不确定它的含义。是的,这会将它们从viewstate中删除,但一旦禁用它,它也会删除查询。处理对象不是最好的方法,因为有很多内部内容。试着在parenonload事件中禁用它们。我真的不知道你所说的禁用是什么意思。usercontrol中没有任何禁用属性或方法。我知道这就是为什么我没有使用这种方法的原因,我现在仍然不会;)是的,我在初始化阶段设置它并检查可见性。我是否也在页面加载本身中禁用viewstate?如果我发现用户是会员?