2008-11-06 17 views

Antwort

37

Eval ("state") ist eine vereinfachte Form des DataBinder.Eval (Container.DataItem, "State") Syntax. Es funktioniert nur innerhalb von datengebundenen Vorlagensteuerelementen.

Weitere Informationen finden Sie unter the MSDN documentation.

11

Es gibt keinen Unterschied. Die "Eval" -Methode ist nur eine Abkürzung für die Methode DataBinder.Eval (Container.DataItem, "blah").

4

die Eval Methode ist nur eine Verknüpfung des letzteren

-5

Ich habe folgenden Code gesehen

<%# (DataBinder.Eval(Container.DataItem, "ApplicationId").ToString() == "-1" ? "N/A" : Eval("ApplicationId").ToString()) %> 

Also ich denke, sie ein wenig anders.

8

Es gibt viele Unterschiede zwischen <%# Eval %> und <%# DataBinder.Eval %> unter der Decke, obwohl the documentation besagt, dass Eval mit (TemplateControl.Eval genau zu sein) DataBinder.Eval tatsächlich aufruft und ihre Aufgabe ist es genau die gleiche Arbeit zu tun.

Das ist richtig, aber die Verwendung nur Eval bedeutet, dass ASP.NET selbst das Objekt, das datengebunden ist, auflöst. Dies geschieht intern mit einem Stack, in dem Elemente hinzugefügt werden, wenn Control.DataBind() aufgerufen wird. Der Trick ist, dass dies nur passiert, wenn die Page Eigenschaft des Steuerelements zu diesem Zeitpunkt nicht null ist.

Wenn die Page --managed Stapel nicht auf dem neuesten Stand ist, wenn Sie auf den Punkt, dass DataItem Bedürfnisse gelöst werden, die Page.GetDataItem() Methode wird eine Ausnahme mit einer Meldung wie

Datenbindung Methoden geben, wie Eval(), XPath() und Bind() können nur im Zusammenhang mit einer datengebundenen Steuerung verwendet werden.

DataBinder.Eval funktioniert immer noch unter diesen Umständen, weil Sie es das Zielobjekt manuell bereitstellen, so ASP.NET keine Lösung für sich allein tun müssen.

+2

, wenn der folgende Fehler auftritt wie "Datenbindungsmethoden wie Eval(), XPath() und Bind() können nur im Kontext eines datengebundenen Steuerelements verwendet werden." Dann sollten wir <% # DataBinder.Eval%> anstelle von <%#Eval%> verwenden. –