Установите значение для свойства ‘visible’ на странице ASPX программно

#asp.net #visible #aspxgridview

#asp.net #видимый #aspxgridview

Вопрос:

Я пытаюсь установить для свойства visible для метки значение true или false в зависимости от условия. Это на странице ASPX. Я делаю что-то не так и получаю сообщение об ошибке при выполнении.

 <td><asp:Label ID="Label23" runat="server" Text='CERTIFIED'
   Visible='<%# DataBinder.Eval(Container.DataItem, "IsAuthorized") > 0%>'>
</asp:Label></td>
 

Ошибка, которую я получаю, приведена ниже.

Сообщение об ошибке компилятора: CS0019: оператор ‘>’ не может быть применен к операндам типа ‘object’ и ‘int’

Какие изменения необходимо внести?

Все, что мне нужно сделать, установить для свойства visible метки значение true, когда значение ‘isAuthorized’ больше нуля.

Ответ №1:

Это потому, что у тебя синтаксическая ошибка, глупый кролик.

Вот, пожалуйста, это должно быть так:

  <td><asp:Label ID="Label23" runat="server" Text='CERTIFIED' Visible='<%# DataBinder.Eval(Container.DataItem, "IsAuthorized") %>'  /></td>
 

У вас > 0 где-то там были дополнительные и.
Кроме того, поскольку вы ничего не делаете между <asp:Label и </asp:Label> , вы можете закрыть его косой чертой и пропустить отдельный конечный тег. Вот так <asp:Label ... />

КРОМЕ того, иногда попытка установить подобное свойство visible вызывает проблемы, программа может пожаловаться, что значение не было логическим. Возможно, вы захотите также объявить явное преобразование, подобное этому:

  Visible='<%# Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "IsAuthorized")) %>' 
 

Комментарии:

1. Это прекрасный ответ! От silly bunny к исправленной строке кода, к объяснению исправления, а затем в конце «вы также можете захотеть». Это идеальная формула для ответа — 1) ответить, 2) объяснить, 3) улучшить.

Ответ №2:

Предполагая, что IsAuthorized это битовый тип, просто приведите его к логическому:

  Visible='<%#Convert.ToBoolean(Eval("IsAuthorized"))%>'  
 

Комментарии:

1. И помните, что оно не может быть нулевым. 🙂

2. Большое спасибо. Это отлично работало для GridView с источником XML. <asp:Label ID="hll1" Visible='<%# Convert.ToBoolean(Eval("srcvis1")) %>' Text="<br />" runat="server" /> Ключевым моментом, конечно, было заменить Bind() вызов Eval() вызовом.

Ответ №3:

Обратите внимание, что на стороне сервера вы можете сделать это:

 <someControl id="myId" runat="server" Visible='<%# this.SomeField > 5 %>'>
 

Но это не сработает, если вы не вызовете DataBind в коде, например, в Page_Load:

 myId.DataBind():
 

Ответ №4:

Предполагая IsAuthorized , что это целое число, вы должны использовать это:

 Visible='<%# ((int)DataBinder.Eval(Container.DataItem, "IsAuthorized")) > 0 %>'
 

Eval возвращает значение an object , поэтому сначала вам нужно преобразовать его в значение an integer .

Комментарии:

1. Кажется, что с «> 0», включенным в OP, это правильный ответ.

Ответ №5:

 <td><asp:Label ID="Label23" runat="server" Text='CERTIFIED' Visible='<%# (int)(DataBinder.Eval(Container.DataItem, "IsAuthorized")) > 0 %>' ></asp:Label></td>