Frage

Ich möchte eine Schaltfläche aktiviert Zustand setzen die Negation eines Wertes zu sein.

So diesen Code gegeben:

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

Wie kann ich die Linkbutton Enabled Attribut false wenn IsDefaultMessage == true machen?

War es hilfreich?

Lösung

Verwenden Eval statt Bind. Bind ist für Zwei-Wege-Bindung, das heißt für Fälle, in denen Sie benötigen, um die Daten zurück zu Ihrer Datenquelle speichern zu können.

Wenn Sie Bind verwenden, wird die kompilierte Seite hat Code tatsächlich erzeugt, die Eval den Wert einzustellen verwendet, und einen Code, um den Wert ausgelesen zu speichern. Da Bind mit generierten Code ersetzt wird, können Sie keine zusätzliche Logik mit Bind verwenden.

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

Andere Tipps

Wenn Sie Eval verwenden können, ist es nur eine Methode der Control Klasse. Es ist nur etwas Besonderes, es muss im Rahmen eines Daten gebunden Block <%# ... %> sein. Other than that, können Sie grundsätzlich den Block wie ein normaler <%= %> Ausdruck Block behandeln:

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

Wenn Sie immer noch wollen, dass es binden (Eval ist nicht Round-Trip), als Sie es hin und her während Datenbindung müssen negieren. Sie können dies allerdings nicht tun müssen, um, wenn man einfach die Kontrolle erneut Wort. Zum Beispiel, wenn ein Kontrollkästchen, statt seine Kennzeichnung „ist nicht Standard-Nachricht“ an den Benutzer und negiert es hin und her, als es lable „Default Mitteilung ist“. Konstruiertes Beispiel, aber Sie bekommen die Idee.

Ich habe noch nie binden, aber mein Verständnis ist, verwendet, dass es zu DataBinder.Eval ähnlich ist. So oder so, kehren beiden Methoden Objekte, so dass Sie es zu einem boolean werfen müssen, bevor es zu bewerten.

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

Edit: Sieht aus wie dies nicht getan werden kann, und einen SqlDataSource auf der Seite unter Verwendung würde das Problem lösen. http://forums.asp.net/t/1009497.aspx .

Falls jemand sucht eine Option mit VB.Net

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

Wie ich mich erinnere (es ist schon eine Weile), gibt es keine besondere Magie in <%#Bind(. Es ist nur #Bind( innerhalb von <% ....%>. Das bedeutet, Sie würden wollen:

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

Der Code

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

wird return true, wenn IsDefaultMessage falsch ist Da "False" .Length = 5 und "True" .Length = 4

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top