2016-04-14 56 views
1

我有一個自定義控制以下代碼的頁面控制:如何隱藏控制和阻止加載數據

<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頁面,就好像用戶具有完全控制一樣(這意味着我擁有頁面上的所有控件,並且如果他們沒有權限而不是將每個控件添加到頁面,就想將其刪除)。

如果用戶沒有權限但我不能阻止加載控件,或者在GridView加載數據的情況下,我可以將控件的可見性設置爲Page_Load函數的false。如果用戶沒有使用(查看)控件的權限,如何停止控件(用戶控件或標準控件)加載任何數據?我曾嘗試以下內嵌代碼不起作用:

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

但是,這並不工作,作爲控制的Page_Load仍是起火的控制,我以爲,如果它是數據綁定任何其他控件將加載數據或行爲類似於我的控制。

回答

2

不知道你的代碼很多,找出確切的答案有點困難。然而,儘管我明白你的問題,這是我的答案。

加載數據爲AnnouncementsGridView應該仍然在你的控制之下。我會在公告控件中公開實際加載數據的方法。對於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 
     } 
    } 
}