Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从ViewState中占用空间中删除用户控件_C#_Asp.net_Viewstate_Web Controls - Fatal编程技术网

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

C# 从ViewState中占用空间中删除用户控件,c#,asp.net,viewstate,web-controls,C#,Asp.net,Viewstate,Web Controls,我有一种管理员和成员页面。两者共享同一页。唯一的区别是Admin看到一个UserControl与成员之间的距离更大。目前我正在这样做: ucControl.Visible = false; 各位议员。这很有效。但这是非常低效的。它查询数据库并遵循正常的生命周期,并且在ViewState中占用空间。我如何才能做到这一点,并使它更高效,这样它就不会查询数据库,也不会不必要地占用ViewState中的空间。make EnableViewState = "false" 对于此控件。 我还将禁用这些控

我有一种管理员和成员页面。两者共享同一页。唯一的区别是Admin看到一个UserControl与成员之间的距离更大。目前我正在这样做:

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?如果我发现用户是会员?