2009-02-17 21 views
8

Non riesco a capire perché questo non funziona di seguito. Ho bisogno di associare la casella di testo a un valore da un'espressione incorporata. Sembra una cosa semplice, giusto? Ma nessuno di questi lavori. Qualche idea? Grazie in anticipo.ASP.net Inline Expression Edizione

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

Edit: Devo dire che questa pagina non ha alcun codice dietro e solo le seguenti direttive in alto.

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

Edit:

L'unica soluzione praticabile che ho potuto venire con breve di aggiungere un codice dietro è l'aggiunta di uno script del server in linea, come questo. Vorrei sapere perché le espressioni in linea non funzioneranno a meno che non ci si trovi in ​​un contesto di associazione dei dati.

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

risposta

14

Nel Page_Load di si dovrà effettuare una chiamata a pagina .DataBind() per

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

al lavoro.

<% =%> è una risposta abbreviata.Write() e non è mai valido come attributo, per qualsiasi tag del server.

<% #%> può essere utilizzato, solo se il conatainer è databound (la pagina nel tuo caso).

<% $%> può essere utilizzato per accedere ai dati nei file di risorse.

MODIFICA: È inoltre possibile dare un'occhiata a How to 'bind' Text property of a label in markup che è una domanda faccina.

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

non funziona ottengo solo "blocchi di codice non sono supportati in questo contesto.". Devo dire che la mia pagina non ha codice, non sono sicuro che sia importante. – James

2

Prova ad aggiungere runat = "server" per gli elementi del server. Altrimenti, questo elemento non verrà elaborato sul server.

MODIFICA: In realtà, "è corretto" che questo non funziona; Codice <% = ...%> non può essere valutato in un tag del server, solo espressioni come ad esempio <% $ Resources:% h1>

+0

Scusa che era un refuso da parte mia i controlli sono impostati su runat = server e ancora non funziona. – James

2

Potrebbe essere necessario lo spazio dei nomi per il controllo TextBox

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

Provato questo, e ancora senza fortuna. – James

+0

potresti anche provare System.Web.UI. Ecco dove viene definita la funzione Eval. – Nick

5

Come indicato, <% =%> è illegale ovunque all'interno di una dichiarazione di controllo del server, tranne quando il markup interno viene analizzato come contenuto (ad esempio < ItemTemplate> all'interno di un ripetitore).

<% #%> è valido come espressione per le proprietà di controllo, in quanto queste espressioni verranno valutate quando viene chiamato DataBind() sul controllo.

L'uso di Eval() sembra un po 'sospetto. Per l'esempio, Eval() utilizzerà l'oggetto Page corrente come contesto di binding, il che significa che il valore della proprietà pubblica denominata "test" sarà associato a quando viene chiamato DataBind(). A meno che tu non abbia questa proprietà definita nella classe Page, l'espressione non valuterà mai nulla.

Eval() è principalmente inteso per l'utilizzo in espressioni all'interno di controlli come Repeater, GridView, ListView, ecc., In cui è presente un elenco di elementi di dati associati tramite modelli e è necessario un metodo per poter accedere al proprietà dell'elemento di dati corrente.

Per tutti gli altri controlli, è sufficiente utilizzare espressioni di codice normali all'interno di un'espressione di associazione dati: è molto più veloce e più intuitivo di Eval(), che si basa sulla riflessione di runtime.

Se si desidera un'alternativa più intelligente utilizzando <% $%> sintassi che evita di associazione dati del tutto, andate qui:

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

4

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

e impostare tbName.DataBind(); in caso di caricamento della pagina.

Per coloro che sono alla ricerca di maggiori informazioni sulle espressioni in linea, fare riferimento ai collegamenti seguenti.

ASP.net hanno il seguente inline expressions