2008-10-28 2 views
2

... Я хочу, чтобы показать «Удалить» кнопку, когда пользователь является администратором, и показать кнопку «Добавить элемент», когда пользователь является участником:Почему в этом контексте не работает 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> 

«видимый» атрибут кнопку Удалить отлично работает , Но гиперссылка «добавить элемент» не отображается, она всегда отображается. View-source сообщает мне, что% # User.IsInRole (@ "DOMAIN \ CMDB_CONTRIBUTE")%> ничего не оценивает. Любая идея, почему это ?

ответ

2

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

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

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

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

1

Try:

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

аспида:. таблица не по всей видимости, привязки данных

+0

Ошибка \t \t-Невозможно создать объект типа 'System.Boolean' из его строкового представления '<% = User.IsInRole (@ "DOMAIN \ CMDB_CONTRIBUTE")%>' для свойства 'Visible'. – Kolten 2008-10-28 22:53:36