我试图使用以下代码根据用户的角色隐藏按钮:
<asp:Button ID="btndisplayrole" Text="Admin Button" Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>' runat="server" OnClick="DisplayRoleClick" />
但是当我运行上面的代码时,我收到以下错误消息:
无法从字符串表示形式'&lt;%= WebApplication1.SiteHelper.IsUserInRole(“Admin”)%&gt;'创建'System.Boolean'类型的对象为'可见'
答案 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") %>