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

时间:2008-12-15 21:14:47

标签: css asp.net .net

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

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

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

无法从字符串表示形式'&lt;%= WebApplication1.SiteHelper.IsUserInRole(“Admin”)%&gt;'创建'System.Boolean'类型的对象为'可见'

5 个答案:

答案 0 :(得分: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建议的那样转到代码隐藏。

答案 1 :(得分:7)

作为替代解决方案:

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

答案 2 :(得分:6)

以下代码有效:

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

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

答案 3 :(得分:2)

如何在后面的代码中执行此操作,例如在Page Load上?

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

答案 4 :(得分:-1)

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

OR

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