2011-07-29 4 views
0

правой, пожалуйста, не указывай мне там: Disable a HyperLink from code behindОтключить гиперссылки в .NET

Моя проблема заключается в следующем. У меня есть гиперссылкой на моей странице ASPX:

<asp:HyperLink Visible='<%= _myUser.hasPermission("Intranet Management")%>' Text="Intranet Management" runat="server" NavigateUrl="/Apps/Admin/Default.aspx" /> 

_myUser.hasPermission("Intranet Management") возвращает булево со значением ИСТИНА или ЛОЖЬ зависит, если текущий пользователь имеет такое разрешение или нет. _myUser объявляется в файле aspx.cs как защищенный член, поэтому я могу получить к нему доступ из файла aspx.

На моей странице я получаю следующее сообщение об ошибке:

Parser Error Message: Cannot create an object of type 'System.Boolean' from its string representation '<%= _myUser.hasPermission("Intranet Management") %>' for the 'Visible' property.

есть ли другой способ сделать это в ASPX файл? Пожалуйста, не просите меня сделать это в коде позади, у меня есть причины сделать это здесь ...

Спасибо за любую помощь.

+2

Не могли бы вы рассказать о причинах? Если вы хотите сделать что-то не так, укажите хотя бы почему –

+0

В какой-то момент я буду использовать источник данных sql, чтобы заполнить список ссылок с помощью ретранслятора, а вместо «Интранет-менеджмент» и т. Д. Я передам имя приложения, от DB ... –

+0

Это по-прежнему не причина. Это должно быть сделано из кода, а также –

ответ

4

Проблема вы столкнулись в том, что asp:Hyperlink является сервер управления, и это обыкновение оценивать код внутри <%= %> для их свойств. Они хотя IIRC привязка, так что вы могли бы попробовать

<asp:HyperLink Visible='<%# _myUser.hasPermission("Intranet Management")%>'... 

И не забудьте позвонить Page.DataBind().

+0

Спасибо, это сработало, я все-таки использовал разные подходы, но я все равно отмечаю ваш ответ. Благодаря! –

3

Для этого не может быть runat="server". Идея заключается в том, что серверные элементы управления будут изменены с использованием кода.

Если вы не хотите использовать код позади, используйте обычный тег <a> без runat="server". Кажется, нет никакой причины, почему вам нужен серверный контроль здесь в любом случае.

+0

Спасибо за объяснение, +1. –

1

использовать следующие вместо:

<%# _myUser.hasPermission("Intranet Management") %> 

Понял от here

+0

Спасибо за ваш вклад. –

1

Это должно работать ...

<asp:HyperLink ID="HyperLink1" Visible='<%# Convert.ToBoolean(_myUser.hasPermission("Intranet Management")) %>' Text="Intranet Management" runat="server" NavigateUrl="/Apps/Admin/Default.aspx" /> 

Возможно, это лучше после всех

<a style='<%= Convert.ToBoolean(_myUser.hasPermission("Intranet Management")) ? "" : "display:none;" %>' href="Apps/Admin/Default.aspx"> Intranet Management </a> 
Смежные вопросы