Назначение свойства Visible кнопки результату статического метода

Я пытаюсь скрыть кнопку в зависимости от роли пользователя, используя следующий код:

 <asp:Button ID = "btndisplayrole" Text = "Admin Button" Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>' runat = "server" OnClick = "DisplayRoleClick" />

Но когда я запускаю приведенный выше код, я получаю следующее сообщение об ошибке:

Невозможно создать объект типа 'System.Boolean' из его строкового представления '<% = WebApplication1.SiteHelper.IsUserInRole ("Admin")%>' для 'Visible'

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
10
0
10 943
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin").ToString() %>'

ИЛИ ЖЕ

Visible=<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>

Пробовал их обоих, ни один из них не работал. IsUserInRole возвращает логическое значение.

azamsharp 16.12.2008 00:20

Извини за это. Я написал свой ответ на основании полученной вами ошибки.

shahkalpesh 16.12.2008 00:25

Следующий код работал:

Visible='<%# WebApplication1.SiteHelper.IsUserInRole("Admin") %>'

Обратите внимание, что aboe использует выражение привязки!

На самом деле приведенный выше код - это НЕ то, что мне нужно, так как теперь мне нужно привязать страницу, чтобы выполнить код!

azamsharp 16.12.2008 00:24

как насчет того, чтобы просто сделать это в коде, например, на Page_Load?

public void Page_Load( object sender, EventArgs e )
{
   btndisplayrole.Visible = WebApplication1.SiteHelper.IsUserInRole("Admin");
}
Ответ принят как подходящий

Вроде интересная проблема .. Но, как говорится в сообщении об ошибке, строка <%= WebApplication1.SiteHelper.IsUserInRole("Admin") %> не может быть преобразована в логическое значение.

К сожалению, я не могу объяснить, почему выражение не оценивается, а вместо этого обрабатывается как строка.

Причина, по которой ваше выражение <%# %> работает так, как ожидалось, заключается в том, что к нему относятся иначе. Когда страница компилируется в класс, компилятор создает обработчик событий, подобный этому:

public void __DataBindingButton2(object sender, EventArgs e)
{
    Button button = (Button) sender;
    Page bindingContainer = (Page) button.BindingContainer;
    button.Visible = HttpContext.Current.User.IsInRole("admin");
}

и подключает этот метод к событию Control.Databinding в вашем элементе управления. Как видите, <%# %> на этот раз правильно обрабатывается как серверный код, а не просто случайная строка.

Поэтому я предполагаю, что решение состоит в том, чтобы либо использовать привязку данных, либо перейти к выделенному коду, как предлагает Андреас Кнудсен.

В качестве альтернативного решения:

<% if (WebApplication1.SiteHelper.IsUserInRole("Admin"))
    {%>
        <asp:Button ID = "btndisplayrole" 
                    Text = "Admin Button" 
                    runat = "server" 
                    OnClick = "DisplayRoleClick" /> 
<%} %>

+1 за публикацию обходного пути о видимости, но я думаю, OP хотел бы, чтобы он работал для любого другого свойства элемента управления.

Manitra Andriamitondra 21.08.2012 16:50

Другие вопросы по теме