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