2008-10-28 105 views
2

...我想要显示的“删除”按钮,当用户是管理员,并显示“添加项”按钮,当用户是一个贡献者:为什么User.IsInRole不能在这种情况下工作?

<!-- More code above --> 
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> 
      <asp:TemplateField ShowHeader="False"> 
       <ItemTemplate> 
        <asp:LinkButton CSSClass="TableRightLink" ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" 
         Visible=<%# User.IsInRole(@"DOMAIN\CMDB_ADMIN") %> 
         Text="Delete" 
         OnClientClick="return confirm('Are you certain you want to delete this item?');"></asp:LinkButton> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
     <SelectedRowStyle VerticalAlign="Top" /> 
     <HeaderStyle ForeColor="White" CssClass="TableHeader" BackColor="SteelBlue" /> 
    </asp:GridView> 
    <asp:table width="100%" runat="server" CSSclass="PromptTable" Visible=<%# User.IsInRole(@"DOMAIN\CMDB_CONTRIBUTE") %> > 
    <asp:tablerow><asp:tablecell HorizontalAlign=Center> 
     <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="AddConfigItem.aspx" ForeColor="LightCyan">Add Item</asp:HyperLink> 
    </asp:tablecell></asp:tablerow></asp:table> 

删除按钮“可见的”属性工作正常。但是,“添加项目”超链接没有,它总是显示。 视图源告诉我,%#User.IsInRole(@“DOMAIN \ CMDB_CONTRIBUTE”)%>不计算任何东西。 ?

回答

2

尝试在标记代码中设置它的后面,而不是在Page_Load中假设id为。 promptTable(在您的示例中未给出),只需添加:

promptTable.Visible = User.IsInRole(@"DOMAIN\CMDB_CONTRIBUTE"); 

可能这需要完成,不管它是否是回发。

FWIW,@Keltex是正确的控制不是数据绑定,所以<%# %>将无法​​正常工作。不幸的是,<%= %>语法不会,因为它总是返回一个字符串,你需要一个布尔值。在这种情况下我找不到任何其他可用的语法。你可以通过使用javascript来关闭显示器来做到这一点,但我怀疑你不希望表格被渲染到页面(如果不在正确的组中)(而不是仅仅隐藏或从DOM上移除客户)。在代码背后做,我认为是正确的方式去做。

1

尝试:

Visible='<%= User.IsInRole(@"DOMAIN\CMDB_CONTRIBUTE") %>' 

的ASP:表中未出现被数据绑定

+0

错误无法为'Visible'属性的字符串表示形式'<%= User.IsInRole(@“DOMAIN \ CMDB_CONTRIBUTE”)%>'创建类型为'System.Boolean'的对象。 – Kolten 2008-10-28 22:53:36

相关问题