为什么User.IsInRole不能在这种情况下工作?
问题描述:
...我想要显示的“删除”按钮,当用户是管理员,并显示“添加项”按钮,当用户是一个贡献者:为什么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”)%>不计算任何东西。 ?
答
尝试在标记代码中设置它的后面,而不是在Page_Load中假设id为。 promptTable(在您的示例中未给出),只需添加:
promptTable.Visible = User.IsInRole(@"DOMAIN\CMDB_CONTRIBUTE");
可能这需要完成,不管它是否是回发。
FWIW,@Keltex是正确的控制不是数据绑定,所以<%# %>
将无法正常工作。不幸的是,<%= %>
语法不会,因为它总是返回一个字符串,你需要一个布尔值。在这种情况下我找不到任何其他可用的语法。你可以通过使用javascript来关闭显示器来做到这一点,但我怀疑你不希望表格被渲染到页面(如果不在正确的组中)(而不是仅仅隐藏或从DOM上移除客户)。在代码背后做,我认为是正确的方式去做。
答
尝试:
Visible='<%= User.IsInRole(@"DOMAIN\CMDB_CONTRIBUTE") %>'
的ASP:表中未出现被数据绑定
错误无法为'Visible'属性的字符串表示形式''创建类型为'System.Boolean'的对象。 – Kolten 2008-10-28 22:53:36