将按钮的可见属性分配给静态方法结果

问题描述 投票:10回答:5

我试图使用以下代码基于用户的角色隐藏按钮:

 <asp:Button ID="btndisplayrole" Text="Admin Button" Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>' runat="server" OnClick="DisplayRoleClick" />

但是,当我运行上面的代码时,我收到以下错误消息:

无法从其字符串表示形式'<%= WebApplication1.SiteHelper.IsUserInRole(“Admin”)%>'为'Visible'创建'System.Boolean'类型的对象

css asp.net .net
5个回答
7
投票

一种有趣的问题..但是正如错误消息所述,字符串<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>无法转换为布尔值。

不幸的是,我无法解释为什么表达式没有被评估,而是被视为字符串。

你的<%# %>表达式按预期工作的原因是因为它的处理方式大不相同。将Page编译成类时,编译器会创建一个类似于此的事件处理程序:

public void __DataBindingButton2(object sender, EventArgs e)
{
    Button button = (Button) sender;
    Page bindingContainer = (Page) button.BindingContainer;
    button.Visible = HttpContext.Current.User.IsInRole("admin");
}

并将此方法挂钩到控件上的Control.Databinding事件。正如您所看到的,<%# %>这次被正确地视为服务器代码,而不仅仅是随机字符串。

所以我想解决方案是使用数据绑定,或者像AndreasKnudsen所建议的那样转向代码隐藏。


7
投票

作为替代解决方案:

<% if (WebApplication1.SiteHelper.IsUserInRole("Admin"))
    {%>
        <asp:Button ID="btndisplayrole" 
                    Text="Admin Button" 
                    runat="server" 
                    OnClick="DisplayRoleClick" /> 
<%} %>

6
投票

以下代码有效:

Visible='<%# WebApplication1.SiteHelper.IsUserInRole("Admin") %>'

注意以上使用绑定表达式!


2
投票

如何在代码隐藏中执行此操作,例如在Page_Load上?

public void Page_Load( object sender, EventArgs e )
{
   btndisplayrole.Visible = WebApplication1.SiteHelper.IsUserInRole("Admin");
}

-1
投票
Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin").ToString() %>'

要么

Visible=<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>
© www.soinside.com 2019 - 2024. All rights reserved.