Можно ли отменить значение в атрибуте, который использует & # 8220; Eval & # 8221 ;?

StackOverflow https://stackoverflow.com/questions/611049

  •  03-07-2019
  •  | 
  •  

Вопрос

Я бы хотел установить включенное состояние кнопки как отрицание значения.

Итак, учитывая этот код:

<asp:CheckBox ID="DefaultChecked" 
              Checked='<%# Bind("IsDefaultMessage") %>' 
              Enabled="false" 
              runat="server" />

<asp:LinkButton ID="MakeDefaultButton" 
                runat="server" 
                CommandName="MakeDefault' 
                CommandArgument='<%# Bind("ResidentialInfoID") %>' 
                Text="Make Default" />

Как сделать атрибут LinkButton Enabled false , если IsDefaultMessage == true ?

Это было полезно?

Решение

Используйте Eval вместо Bind. Привязка предназначена для двусторонней привязки, т. Е. Для случаев, когда вам нужно иметь возможность сохранить данные обратно в источник данных.

Когда вы используете Bind, на скомпилированной странице будет сгенерирован код, который использует Eval для установки значения, а также некоторый код для считывания значения для сохранения. Поскольку Bind заменяется сгенерированным кодом, вы не можете использовать дополнительную логику с Bind.

<asp:CheckBox ID="DefaultChecked" Checked='<%# !(bool)Eval("IsDefaultMessage") %>' Enabled="false" runat="server" />
<asp:LinkButton ID="MakeDefaultButton" runat="server" CommandName="MakeDefault' CommandArgument='<%#Bind("ResidentialInfoID") %>' Text="Make Default"/>

Другие советы

Если вы можете использовать Eval, то это просто метод класса Control . Особенность заключается в том, что он должен находиться в контексте блока данных, связанного с <% # ...% > . Кроме этого, вы можете рассматривать блок как обычный блок выражений <% =% > :

<%# !(bool)Eval("IsDefaultMessage") %>

Если вы хотите все еще связать его (Eval не туда-обратно), вам нужно будет отрицать его назад и вперед во время привязки данных. Возможно, вам не понадобится делать это, если вы можете просто перефразировать элемент управления. Например, если установлен флажок, вместо того, чтобы пометить его как «Сообщение не по умолчанию», quot; пользователю и отрицают его взад и вперед, чем помечают его «Is Default Message». Придуманный пример, но вы поняли идею.

Я никогда не использовал Bind, но, насколько я понимаю, он похож на Databinder.Eval. В любом случае оба метода возвращают объекты, поэтому вам необходимо привести его к логическому значению, прежде чем оценивать его.

<%# !Convert.ToBoolean(Bind("IsDefaultMessage") %>

Редактировать. Похоже, что это невозможно, и использование SqlDataSource на странице решит проблему. http://forums.asp.net/t/1009497.aspx .

В случае, если кто-то ищет вариант с VB.Net

<asp:CheckBox ID="DefaultChecked" Checked='<%# NOT (Eval("IsDefaultMessage")) %>' Enabled="false" runat="server" />

Как я помню (это было давно), в <% # Bind ( нет особой магии. Это просто #Bind ( внутри <% ..) ..% > ;. Это означает, что вы хотите:

 <%  ! #Bind("IsDefaultMessage") %>'

Код

Checked='<%# Eval("IsDefaultMessage").ToString().Length() > 4 %>'

вернет true, если IsDefaultMessage равно false Поскольку «False» .Length = 5 и «True» .Length = 4

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top