Question

Je voudrais définir l'état activé d'un bouton pour qu'il soit la négation d'une valeur.

Donc, étant donné ce code:

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

Comment créer l'attribut LinkButton Enabled false si IsDefaultMessage == true ?

Était-ce utile?

La solution

Utilisez Eval au lieu de Bind. Bind est une liaison bidirectionnelle, c’est-à-dire dans les cas où vous devez pouvoir sauvegarder les données dans votre source de données.

Lorsque vous utilisez Bind, la page compilée aura en réalité un code qui utilise Eval pour définir la valeur, plus du code permettant de lire la valeur à enregistrer. Bind étant remplacé par du code généré, vous ne pouvez utiliser aucune logique supplémentaire avec 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"/>

Autres conseils

Si vous pouvez utiliser Eval, il ne s'agit que d'une méthode de la classe Control . Ce n'est que spécial en ce sens qu'il doit être dans le contexte d'un bloc lié aux données <% # ...% > . En dehors de cela, vous pouvez traiter le bloc comme un bloc d’expression <% =% > classique:

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

Si vous souhaitez toujours le lier (l’évaluation n’est pas un aller-retour), il vous faudra l’annuler pendant la liaison de données. Vous n’aurez peut-être pas besoin de le faire si vous pouvez simplement reformuler le contrôle. Par exemple, s'il s'agit d'une case à cocher, au lieu de l'étiqueter, "Message non par défaut". à l'utilisateur et en le refusant d'avant en arrière, puis étiquetez-le "message par défaut". Exemple élaboré, mais vous voyez l'idée.

Je n’ai jamais utilisé Bind, mais j’ai bien compris qu’il ressemblait à Databinder.Eval. Dans les deux cas, les deux méthodes renvoient des objets, vous devez donc le convertir en un booléen avant de l’évaluer.

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

Modifier: on dirait que cela ne peut pas être fait et utiliser un SqlDataSource sur la page résoudrait le problème. http://forums.asp.net/t/1009497.aspx .

Si quelqu'un cherche une option avec VB.Net

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

Si je me souviens bien (cela fait longtemps), il n'y a pas de magie particulière dans <% # Bind (). C'est juste #Bind ( à l'intérieur de <% .. ..% > ;. Ce qui signifie que vous voudriez:

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

Le code

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

retournera true si IsDefaultMessage est false Depuis "Faux". Longueur = 5 et "Vrai". Longueur = 4

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top