Почему User.IsInRole не работает в этом контексте? - PullRequest
2 голосов
/ 29 октября 2008

... Я хочу показать кнопку «Удалить», когда пользователь является администратором, и показать кнопку «Добавить элемент», когда пользователь является участником:

<!-- 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")%> ничего не оценивает. Есть идеи, почему это так?

Ответы [ 2 ]

2 голосов
/ 29 октября 2008

Попробуйте установить его в коде, а не в разметке, в Page_Load. Предполагая, что id является promptTable (он не был указан в вашем примере), просто добавьте:

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

Предположительно, это необходимо сделать независимо от того, является ли это обратным вызовом или нет.

FWIW, @Keltex прав в том, что элемент управления не привязан к базе данных, поэтому <%# %> не будет работать. К сожалению, синтаксис <%= %> также не будет работать, потому что он всегда возвращает строку, и вам нужно логическое значение там. Я не мог найти другой синтаксис, который работал бы в этом случае. Возможно, вы могли бы сделать это, отключив отображение с помощью javascript, но я подозреваю, что вы не хотите, чтобы таблица отображалась на странице, если она не в правильной группе (в отличие от простого скрытия или удаления из DOM один раз на клиент). Делая это в коде, я думаю, это правильный путь.

1 голос
/ 29 октября 2008

Попробуйте:

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

Таблица asp: не связана с данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...