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

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

但是链接按钮总是可见的,似乎它没有调用类并且没有取回值。它似乎是类没有返回任何值,有人可以帮助我确定拥有这个和在 DetailsView 中工作和不为简单的链接按钮工作之间的区别。

注意:有一个解决方法,我可以在 Page Load 事件中调用相同的方法,该方法可以正常工作而没有任何问题。代码如下

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

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

    }
4

1 回答 1

2

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

如果您希望DataBind 该页面也适用于LinkButton以下内容DetailsView

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

内联 asp.net 标签...将它们全部排序(<%$、<%=、<%、<%# 等)

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

于 2013-01-05T23:48:03.650 回答