Pergunta

Eu gostaria de definir o estado habilitado de um botão para ser a negação de um valor.

Assim, dado este código:

<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" />

Como posso fazer o Enabled LinkButton atributo false se IsDefaultMessage == true?

Foi útil?

Solução

Use Eval vez de Bind. Bind é para a ligação de duas vias, ou seja, para os casos em que você precisa para ser capaz de salvar a parte de trás de dados para a sua fonte de dados.

Quando você usa Bind, a página compilada vai realmente ter gerado o código que usa Eval para definir o valor, mais algum código para ler o valor para a poupança. Porque Bind é substituído por código gerado, você não pode usar qualquer lógica extra com 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"/>

Outras dicas

Se você pode usar Eval, é apenas um método da classe Control. É apenas especial em que ele precisa ser no contexto de um <%# ... %> bloco ligado a dados. Fora isso, você pode basicamente tratar o bloco como um bloco de expressão <%= %> regulares:

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

Se você quiser ainda vinculá-lo (Eval não é de ida e volta), do que você vai precisar para negá-lo e para trás durante a ligação de dados. Você pode não precisar de fazer isso, porém, se você pode simplesmente re-palavra de controle. Por exemplo, se uma caixa de seleção, em vez de rotulá-lo "não é Mensagem Padrão" para o usuário e negando frente e para trás, que lable-lo "é a mensagem padrão". exemplo inventado, mas você começa a idéia.

Eu nunca usei Bind mas o meu entendimento é que ele é semelhante ao DataBinder.Eval. De qualquer maneira, ambos os métodos retornam objetos que você precisa convertê-lo para um booleano antes de avaliá-lo.

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

Editar: parece que isso não pode ser feito e usando um SqlDataSource na página resolveria o problema. http://forums.asp.net/t/1009497.aspx .

No caso de alguém está à procura de uma opção com VB.Net

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

Se bem me lembro (Tem sido um tempo), não há nenhuma mágica especial em <%#Bind(. É apenas dentro #Bind( <% ....%>. Que significa que você iria querer:

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

O código

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

retornará verdadeiro se IsDefaultMessage é falsa Desde "False" .Length = 5 e "True" .Length = 4

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top