gpt4 book ai didi

c# - 为什么 User.IsInRole 在这种情况下不起作用?

转载 作者:行者123 更新时间:2023-11-30 22:51:00 29 4
gpt4 key购买 nike

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

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

最佳答案

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

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

据推测,无论是否回发,都需要这样做。

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

关于c# - 为什么 User.IsInRole 在这种情况下不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/245027/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com