我对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>
<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;
}
}
答案 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
。静态方法还没有受到伤害。但是,如果您还使用静态字段,则会进入雷区,因为它将在所有请求中共享。无论如何,您当前的代码隐藏“解决方法”是更好的方法。