2013-01-05 50 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。静态方法还没有受到伤害。但是,如果您也使用静态字段,则会进入雷区,因为它会在所有请求之间共享。无论如何,您目前的代码隐藏“解决方法”是更好的方法。