Подтвердить что ты не робот

Могу ли я отрицать значение в атрибуте, использующем "Eval"?

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

Итак, данный код:

<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?

4b9b3361

Ответ 1

Используйте 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"/>

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

Если кто-то ищет вариант с VB.Net

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

Ответ 5

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

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

Ответ 6

Код

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

вернет true, если IsDefaultMessage false Так как "False".Length = 5 и "True".Length = 4