2009-02-17 16 views
8

Ich kann nicht scheinen, herauszufinden, 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? Danke im Voraus.ASP.NET Inline-Ausdruck Problem

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

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

<%@ Import Namespace="System" %> 
<%@ Import Namespace="System.Web" %> 
<%@ Page Language="C#" %> 

Edit:

Die einzige praktikable Lösung, die ich mit kurzem einen Code einfiel hinter der Zugabe eines Inline-Server-Skript ist das Hinzufügen, wie dieser. Ich wünschte, ich wüsste, warum die Inline-Ausdrücke nicht funktionieren, wenn Sie nicht in einem Datenbindungskontext sind.

<script language="C#" runat="server"> 
    private void Page_Load(object sender, System.EventArgs e) 
    { 
     tbName.Text = "test"; 
    } 
</script> 

Antwort

14

Im Page_Load von einem Anruf zu Seite machen müssen .DataBind() für

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

zu arbeiten.

<% =%> ist eine verkürzte response.Write() und ist nie als ein Attribut für ein beliebiges Server-Tag gültig.

<% #%> kann nur verwendet werden, wenn der Conatainer datengebunden ist (die Seite in Ihrem Fall).

<% $%> kann verwendet werden, um auf Daten in Ressourcendateien zuzugreifen.

EDIT: Sie können auch einen Blick auf How to 'bind' Text property of a label in markup werfen, die eine ähnliche Frage ist.

1
<asp:textbox id="tbName" runat="server"><%="test"%></asp:textbox> 
+0

Ist ich nicht nur Arbeit bekommen "sind Codeblöcke in diesem Zusammenhang nicht unterstützt.". Ich sollte erwähnen, dass meine Seite keinen Code hat, ich bin mir nicht sicher, ob das wichtig ist. – James

2

Versuchen Hinzufügen runat = "server" auf die Server-Elemente. Andernfalls wird dieses Element nicht auf dem Server verarbeitet.

EDIT: Eigentlich "ist es richtig", dass dies nicht funktioniert; Code <% = ...%> kann nicht in einem Server-Tag ausgewertet werden, nur Ausdrücke wie zum Beispiel <% $ Ressourcen: h1%>

+0

Entschuldigung, das war ein Tippfehler meinerseits sind die Kontrollen auf runat = server eingestellt und es funktioniert immer noch nicht. – James

2

Sie den Namespace für die Textbox-Steuerelement benötigen

<%@ Import "System.Web.UI.WebControls" %> 
+0

Versuchte das und immer noch kein Glück. – James

+0

können Sie auch System.Web.UI ausprobieren. Dort ist die Eval-Funktion definiert. – Nick

5

Wie bereits erwähnt, ist <% =%> an einer beliebigen Stelle innerhalb einer Serversteuerdeklaration unzulässig, außer wenn das interne Markup als Inhalt analysiert wird (z. B. < ItemTemplate> innerhalb eines Repeaters).

<% #%> ist als Ausdruck für Steuerelementeigenschaften gültig, da diese Ausdrücke ausgewertet werden, wenn DataBind() für das Steuerelement aufgerufen wird.

Ihre Verwendung von Eval() sieht ein wenig verdächtig. 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 die Verwendung in Ausdrücken innerhalb von Steuerelementen wie Repeater, GridView, ListView usw. gedacht, wo es eine Liste von Datenelementen gibt, die mithilfe von Vorlagen gebunden werden, und Sie benötigen eine Methode zum Zugriff auf Eigenschaften des aktuellen Datenelements. Für alle anderen Steuerelemente verwenden Sie einfach normale Codeausdrücke in einem Datenbindungsausdruck - es ist viel schneller und intuitiver als Eval(), das auf Laufzeitreflexion beruht.

Wenn Sie eine clevere Alternative mit <% $% möchten> Syntax, die insgesamt Datenbindung vermeidet, gehen Sie hier:

http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx