如何根据类返回的结果隐藏链接按钮?

时间:2013-01-05 23:28:49

标签: asp.net class detailsview

我对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之外有一个单独的链接按钮。它只是一个导航到另一个页面的链接。我希望使用相同的逻辑以类似的方式隐藏它。我的网络表单中包含以下代码。

<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;
        }

    }

1 个答案:

答案 0 :(得分:2)

原因是这仅适用于数据绑定表达式:<%#由于DetailsView是数据绑定,因此它可以在那里工作。

如果您DataBind该页面也适用于LinkButton以外的DetailsView

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

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

旁注:在ASP.NET中要小心static。静态方法还没有受到伤害。但是,如果您还使用静态字段,则会进入雷区,因为它将在所有请求中共享。无论如何,您当前的代码隐藏“解决方法”是更好的方法。