2013-01-05 55 views
0

我對C#有點新,並且有一個問題。如何根據類返回的結果隱藏鏈接按鈕?

我有一個類,如下簡單地返回false(這只是爲了測試)

public class SetAuthority 
{ 
    public SetAuthority() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 
    public static Boolean AuthorizedToAddEdit() 
    { 
     return false; 
    } 
} 

我有一個DetailsView有兩個鏈接按鈕編輯和添加新記錄。我想基於上面的類方法返回值來隱藏鏈接按鈕。

<ItemTemplate> 
         <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" visible='<%# SetAuthority.AuthorizedToAddEdit() %>' 
          CommandName="Edit" Text="Edit"></asp:LinkButton> 
         &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" visible='<%# SetAuthority.AuthorizedToAddEdit() %>' 
          CommandName="New" Text="New"></asp:LinkButton> 
</ItemTemplate> 

當我運行程序時,上面的工作文件和編輯和新鏈接按鈕被隱藏。

但問題是,我有一個單獨的鏈接按鈕之外的DetailsView。這只是一個導航到另一個頁面的鏈接。我想用相同的邏輯以類似的方式隱藏它。我在我的webform中有下面的代碼。

<asp:LinkButton ID="LinkButton5" runat="server" CausesValidation="False" visible='<%# SetAuthority.AuthorizedToAddEdit() %>' 
          CommandName="OpenAdminPage" Text="Open Admin Page"></asp:LinkButton> 

但鏈接按鈕始終可見,似乎它不是調用類,也沒有獲取值。看起來這個類沒有返回任何價值,有人可以幫助我確定在DetailsView中工作和不在工作中的簡單鏈接按鈕之間有什麼不同。

注意:有一個解決方法,我可以在頁面加載事件中調用相同的方法,可以正常工作而不會出現任何問題。代碼如下

protected void Page_Load(object sender, EventArgs e) 
    { 
     Boolean myAllowAdd; 
     myAllowAdd = SetAuthority.AuthorizedToAddEdit(); 

     if (myAllowAdd == false) 
     { 
      LinkButton1.Visible = false; 
     } 

    } 

回答

2

的原因是,這是唯一的數據綁定表達式:<%#由於DetailsView是數據綁定它在那裏工作。

,如果您DataBind它還曾爲LinkButtonDetailsView的頁面:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Page.DataBind(); 
} 

inline asp.net tags... sorting them all out (<%$, <%=, <%, <%#, etc.)

側面說明:小心在ASP.NET static。靜態方法還沒有受到傷害。但是,如果您也使用靜態字段,則會進入雷區,因爲它會在所有請求之間共享。無論如何,您目前的代碼隱藏「解決方法」是更好的方法。