Присвоение видимого свойства кнопки результату статического метода - PullRequest
10 голосов
/ 16 декабря 2008

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

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

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

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

Ответы [ 5 ]

7 голосов
/ 25 мая 2012

Как альтернативное решение:

<% if (WebApplication1.SiteHelper.IsUserInRole("Admin"))
    {%>
        <asp:Button ID="btndisplayrole" 
                    Text="Admin Button" 
                    runat="server" 
                    OnClick="DisplayRoleClick" /> 
<%} %>
7 голосов
/ 16 декабря 2008

Вид интересной проблемы. Но, как говорится в сообщении об ошибке, строка <%= 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 в вашем элементе управления. Как видите, <%# %> на этот раз правильно обрабатывается как код сервера, а не просто как случайная строка.

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

6 голосов
/ 16 декабря 2008

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

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

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

2 голосов
/ 16 декабря 2008

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

public void Page_Load( object sender, EventArgs e )
{
   btndisplayrole.Visible = WebApplication1.SiteHelper.IsUserInRole("Admin");
}
0 голосов
/ 16 декабря 2008
Visible='<%= WebApplication1.SiteHelper.IsUserInRole("Admin").ToString() %>'

OR

Visible=<%= WebApplication1.SiteHelper.IsUserInRole("Admin") %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...