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

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

 <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") %>
Другие вопросы по тегам