Domanda

Vorrei impostare lo stato abilitato di un pulsante per negare un valore.

Quindi dato questo codice:

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

Come posso rendere l'attributo LinkButton Enabled false se IsDefaultMessage == true ?

È stato utile?

Soluzione

Usa Eval invece di Bind. Il bind è per l'associazione bidirezionale, ovvero per i casi in cui è necessario essere in grado di salvare i dati nell'origine dati.

Quando usi Bind, la pagina compilata avrà effettivamente generato codice che usa Eval per impostare il valore, oltre ad un po 'di codice per leggere il valore per il salvataggio. Poiché Bind viene sostituito con il codice generato, non è possibile utilizzare alcuna logica aggiuntiva con 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"/>

Altri suggerimenti

Se puoi usare Eval, è solo un metodo della classe Control . È speciale in quanto deve trovarsi nel contesto di un blocco associato a dati <% # ...% > . A parte questo, puoi sostanzialmente trattare il blocco come un normale blocco di espressioni <% =% > :

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

Se vuoi ancora rilegarlo (Eval non è andata e ritorno), allora dovrai negarlo avanti e indietro durante il databinding. Tuttavia, potrebbe non essere necessario eseguire questa operazione, se è possibile riformulare il controllo. Ad esempio, se una casella di controllo, anziché etichettarla " messaggio non predefinito " per l'utente e negandolo avanti e indietro, quindi emetterlo "È il messaggio predefinito". Esempio contrastato, ma hai avuto l'idea.

Non ho mai usato Bind ma la mia comprensione è che è simile a Databinder.Eval. In entrambi i casi, entrambi i metodi restituiscono gli oggetti, quindi è necessario eseguirne il cast su un valore booleano prima di valutarlo.

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

Modifica: sembra che ciò non possa essere fatto e l'utilizzo di SqlDataSource nella pagina risolverebbe il problema. http://forums.asp.net/t/1009497.aspx .

Nel caso qualcuno stia cercando un'opzione con VB.Net

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

Come ricordo (è passato un po 'di tempo), non c'è nessuna magia particolare in <% # Bind (. È solo #Bind ( dentro <% .. ..% > ;. Il che significa che vorresti:

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

Il codice

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

restituirà true se IsDefaultMessage è false Poiché "Falso" .Lunghezza = 5 e "Vero". Lunghezza = 4

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top