...我想在用户是管理员时显示“删除”按钮,并在用户是撰稿人时显示“添加项目”按钮:
<!-- 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>
“删除”按钮“可见”属性正常。但是,“添加项目”超链接不会。它总是显示。 View-source告诉我%#User.IsInRole(@“DOMAIN \ CMDB_CONTRIBUTE”)%&gt;没有评估任何事情。知道为什么会这样吗?
答案 0 :(得分:2)
尝试在Page_Load中设置代码,而不是在标记中。假设id是promptTable(在你的例子中没有给出),只需添加:
promptTable.Visible = User.IsInRole(@"DOMAIN\CMDB_CONTRIBUTE");
据推测,无论是否是回发,都需要这样做。
FWIW,@ Kertex对控件不是数据绑定是正确的,因此<%# %>
将不起作用。不幸的是,<%= %>
语法也不会因为它总是返回一个字符串而你需要一个布尔值。在这种情况下,我找不到任何其他语法。您可以通过使用javascript关闭显示来实现此目的,但我怀疑您不希望将表呈现到页面(如果不在正确的组中)(而不是仅仅隐藏或从DOM中删除一次)客户)。在后面的代码中执行它,我认为是正确的方法。
答案 1 :(得分:1)
尝试:
Visible='<%= User.IsInRole(@"DOMAIN\CMDB_CONTRIBUTE") %>'
asp:table似乎不是数据绑定。