3

...我想在用户是管理员时显示“删除”按钮,并在用户是贡献者时显示“添加项目”按钮:

<!-- 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") %> 没有评估任何东西。知道这是为什么吗?

4

2 回答 2

2

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

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

大概无论是否是回发,都需要这样做。

FWIW,@Keltex 关于控件没有被数据绑定是正确的,因此<%# %>无法正常工作。不幸的是,<%= %>语法也不会,因为它总是返回一个字符串,你需要一个布尔值。我找不到在这种情况下可以使用的任何其他语法。您可能可以通过使用 javascript 关闭显示来做到这一点,但我怀疑如果表格不在正确的组中,您不希望将表格呈现到页面上(而不是在客户)。在后面的代码中做这件事,我认为是正确的方法。

于 2008-10-28T23:33:29.300 回答
1

尝试:

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

asp:table 似乎没有数据绑定。

于 2008-10-28T21:58:22.083 回答