如何隐藏控件并阻止控件加载数据

时间:2016-04-14 19:05:22

标签: c# asp.net webforms controls

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

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

我们还说我有一个GridView控件,所以我可以涵盖多个场景。我需要通过检查布尔值来检查用户是否有权查看此控件:

PermissionsManagement.DoesUserHavePermission(userId, permissionId)

定义为:

public static class PermissionsManagement
{
    public static bool DoesUserHavePermission(int userAccountId, int permissionId)
    {
        // Code Goes Here
    }
}

如果用户没有权限,则DoesUserHavePermission将返回false。我将ASP.NET WebForms页面布局为好像用户具有完全控制权(意味着我拥有页面上的所有控件,如果他们没有权限而不是将每个控件添加到页面中,则要删除它们。)< / p>

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

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

但是这不起作用,因为控件的Page_Load仍会触发控件,我认为任何其他控件都会加载数据,如果它是数据绑定的或与我的控件类似的行为。

1 个答案:

答案 0 :(得分:2)

在不了解您的代码的情况下,找出确切的答案有点困难。但是,尽管我理解你的问题,但这是我的答案。

加载AnnouncementsGridView的数据仍应由您控制。我将在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
        }
    }
}