Присвоение видимого свойства кнопки результату статического метода
Я пытаюсь скрыть кнопку в зависимости от роли пользователя, используя следующий код:
<asp:Button ID="btndisplayrole" Text="Admin Button" Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>' runat="server" OnClick="DisplayRoleClick" />
Но когда я запускаю приведенный выше код, я получаю следующее сообщение об ошибке:
Невозможно создать объект типа 'System.Boolean' из его строкового представления '<% = WebApplication1.SiteHelper.IsUserInRole ("Admin")%>"для" Visible "
5 ответов
Вроде интересная проблема.. Но, как говорится в сообщении об ошибке, строка <%= 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" />
<%} %>
Сработал следующий код:
Visible='<%# WebApplication1.SiteHelper.IsUserInRole("Admin") %>'
Note that the aboe use the binding expression!
Как насчет того, чтобы просто сделать это в коде, например, в Page_Load?
public void Page_Load( object sender, EventArgs e )
{
btndisplayrole.Visible = WebApplication1.SiteHelper.IsUserInRole("Admin");
}
Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin").ToString() %>'
ИЛИ ЖЕ
Visible=<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>