Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# 如何隐藏控件并防止控件加载数据_C#_Asp.net_Webforms_Controls - Fatal编程技术网

C# 如何隐藏控件并防止控件加载数据

C# 如何隐藏控件并防止控件加载数据,c#,asp.net,webforms,controls,C#,Asp.net,Webforms,Controls,我有一个页面,其中包含自定义控件的以下代码: <SiteControls:Announcements runat="server" id="UserAnnouncements" /> 定义为: public static class PermissionsManagement { public static bool DoesUserHavePermission(int userAccountId, int permissionId) { // Co

我有一个页面,其中包含自定义控件的以下代码:

<SiteControls:Announcements runat="server" id="UserAnnouncements" />
定义为:

public static class PermissionsManagement
{
    public static bool DoesUserHavePermission(int userAccountId, int permissionId)
    {
        // Code Goes Here
    }
}
如果用户没有权限,DoesUserHavePermission将返回false。我将ASP.NET WebForms页面布局为用户拥有完全控制权(这意味着我拥有页面上的所有控件,如果它们没有权限,我希望删除它们,而不是将每个控件添加到页面)

如果用户没有权限,我可以在Page_Load函数中将控件的可见性设置为false,但这不会阻止我加载控件,或者在GridView的情况下阻止加载其数据。如果用户没有使用(查看)控件的权限,如何阻止控件(用户控件或标准控件)加载任何数据?我尝试了以下不起作用的内联代码:

<% if(PermissionsManagement.DoesUserHavePermission(1, 1))
   { %>
        <SiteControls:Announcements runat="server" id="UserAnnouncements" />
<% } %>


但这不起作用,因为控件页面仍然为该控件启动加载,我假设任何其他控件都将加载数据,如果它是数据绑定的或与我的控件的行为类似。

由于不太了解您的代码,因此很难找到确切的答案。然而,正如我理解你的问题一样,以下是我的答案

公告
GridView
加载数据仍应由您控制。我将在Announcements控件中公开一个方法,该方法实际为它加载数据。对于GridView,您只需将
DataSource
的绑定推迟到执行权限检查。当然,除了隐藏(设置可见性)这些控件之外,还需要执行这些操作

参见下面的代码,虽然不完整,但足以表达一个想法:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // Check permissions here
        if (allowed) 
        {
            // For custom/user control
            UserAnnouncements.GetAnnouncements();
            // For grid view
            GridView1.DataSource = GetGridviewData(); // GetGridviewData would return DataSet or anything valid.
            GridView1.DataBind();
        }
        else
        {
            // Hide the controls
        }
    }
}
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // Check permissions here
        if (allowed) 
        {
            // For custom/user control
            UserAnnouncements.GetAnnouncements();
            // For grid view
            GridView1.DataSource = GetGridviewData(); // GetGridviewData would return DataSet or anything valid.
            GridView1.DataBind();
        }
        else
        {
            // Hide the controls
        }
    }
}