Я пытаюсь скрыть кнопку в зависимости от роли пользователя, используя следующий код:
<asp:Button ID = "btndisplayrole" Text = "Admin Button" Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>' runat = "server" OnClick = "DisplayRoleClick" />
Но когда я запускаю приведенный выше код, я получаю следующее сообщение об ошибке:
Невозможно создать объект типа 'System.Boolean' из его строкового представления '<% = WebApplication1.SiteHelper.IsUserInRole ("Admin")%>' для 'Visible'






Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin").ToString() %>'
ИЛИ ЖЕ
Visible=<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>
Извини за это. Я написал свой ответ на основании полученной вами ошибки.
Следующий код работал:
Visible='<%# WebApplication1.SiteHelper.IsUserInRole("Admin") %>'
Обратите внимание, что aboe использует выражение привязки!
На самом деле приведенный выше код - это НЕ то, что мне нужно, так как теперь мне нужно привязать страницу, чтобы выполнить код!
как насчет того, чтобы просто сделать это в коде, например, на 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 хотел бы, чтобы он работал для любого другого свойства элемента управления.
Пробовал их обоих, ни один из них не работал. IsUserInRole возвращает логическое значение.