ASP.net Inline-Ausdruck Problem

8

Ich kann nicht herausfinden, warum das unten nicht funktioniert. Ich muss das Textfeld an einen Wert aus einem Inline-Ausdruck binden. Scheint wie eine einfache Sache, oder? Aber beides funktioniert nicht. Irgendwelche Ideen? Vielen Dank im Voraus.

%Vor%

Bearbeiten: Ich sollte erwähnen, dass diese Seite keinen Code hinter und nur die folgenden Anweisungen an der Spitze hat.

%Vor%

Bearbeiten:

Die einzige praktikable Lösung, die ich mir vorstellen kann, wenn ich einen Code hinterlasse, ist ein Inline-Server-Skript wie dieses. Ich wünschte, ich wüsste, warum die Inline-Ausdrücke nicht funktionieren, wenn Sie sich in einem Datenbindungskontext befinden.

%Vor%     
James 17.02.2009, 22:11
quelle

6 Antworten

14

In Page_Load von müssen Sie PageDataBind () für

aufrufen %Vor%

um zu arbeiten.

& lt;% =% & gt; ist eine verkürzte response.Write () und ist niemals als Attribut für ein Server-Tag gültig.

& lt;% #% & gt; kann nur verwendet werden, wenn der Conatainer datengebunden ist (die Seite in Ihrem Fall).

& lt;% $% & gt; kann verwendet werden, um auf Daten in Ressourcendateien zuzugreifen.

BEARBEITEN: Sie können auch einen Blick auf Wie man eine Text-Eigenschaft eines Labels im Markup bindet , was eine ähnliche Frage ist.

    
Martin 17.02.2009, 23:26
quelle
5

Wie bereits erwähnt, & lt;% =% & gt; ist überall in einer Serversteuerdeklaration illegal, außer wenn inneres Markup als Inhalt analysiert wird (z. B. & lt; ItemTemplate & gt; in einem Repeater).

& lt;% #% & gt; ist als Ausdruck für Steuereigenschaften gültig, da diese Ausdrücke ausgewertet werden, wenn DataBind () für das Steuerelement aufgerufen wird.

Ihre Verwendung von Eval () sieht allerdings etwas verdächtig aus. In diesem Beispiel verwendet Eval () das aktuelle Page-Objekt als Bindungskontext, was bedeutet, dass der Wert der öffentlichen Eigenschaft namens "test" gebunden wird, wenn DataBind () aufgerufen wird. Wenn Sie diese Eigenschaft nicht für die Page-Klasse definiert haben, wird der Ausdruck niemals zu irgendetwas ausgewertet.

Eval () ist hauptsächlich für Ausdrücke in Steuerelementen wie Repeater, GridView, ListView usw. vorgesehen, in denen eine Liste von Datenelementen mithilfe von Vorlagen gebunden wird und Sie eine Methode benötigen, um auf die Eigenschaften zugreifen zu können des aktuellen Datenelements.

Verwenden Sie für alle anderen Steuerelemente nur normale Codeausdrücke innerhalb eines Datenbindungsausdrucks - es ist viel schneller und intuitiver als Eval (), das auf der Laufzeitreflexion beruht.

Wenn Sie eine klügere Alternative mit & lt;% $% & gt; Syntax, die Datenbindung insgesamt vermeidet, gehen Sie hier:

Ссылка

    
Sam 17.02.2009 23:23
quelle
4

Verwenden Sie <asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />

und legen Sie tbName.DataBind(); beim Laden der Seite fest.

Weitere Informationen zu Inline-Ausdrücken finden Sie unter den folgenden Links.

ASP.net hat die folgenden Inline-Ausdrücke

Sen Jacob 02.03.2013 09:18
quelle
2

Sie benötigen möglicherweise den Namespace für das Textfeldsteuerelement

%Vor%     
Nick 17.02.2009 22:29
quelle
2

Fügen Sie den Serverelementen runat="server" hinzu. Andernfalls wird dieses Element nicht auf dem Server verarbeitet.

EDIT: Eigentlich "ist es richtig", dass das nicht funktioniert; Code & lt;% = ...% & gt; kann nicht in einem Server-Tag ausgewertet werden, nur Ausdrücke wie zum Beispiel & lt;% $ Resources: h1% & gt;

    
baretta 17.02.2009 22:16
quelle
1
%Vor%     
Joel Coehoorn 17.02.2009 22:14
quelle

Tags und Links