2009-09-08 15 views
36

Questo funziona:Come utilizzare ASP.NET <% = tag negli attributi del controllo server?

<span value="<%= this.Text %>" /> 

Questo non funziona:

<asp:Label Text="<%= this.Text %>" runat="server" /> 

Perché?

Come posso far funzionare correttamente il secondo caso, vale a dire, impostare il testo dell'etichetta sul valore della variabile "Testo"?

+0

possibile duplicato del [Perché saranno <%= %> espressioni come valori di proprietà su un server controlli portare ad un'errori di compilazione? ] (http://stackoverflow.com/questions/370201/why-will-expressions-as-property-values-on-a-server-controls-lead-a--co) – zzzzBov

risposta

5

Non sai come contrassegnare questo come tale, ma questo è un po 'di un duplicato. See this thread.

Non penso che incorporare il codice nel tuo markup renderà il tuo markup più chiaro o più elegante.

+2

Late comment: I'd think che l'impostazione di qualcosa come il testo di un pulsante su una semplice variabile o funzione ha più senso nel codice rispetto al codice sottostante. Soprattutto se hai molti pulsanti impostati con text = "literal", ma uno o due hanno bisogno di un codice, è fastidioso che molti siano impostati nel markup ma le eccezioni sono nel codice sottostante. Ora non devo solo guardare in due punti per vedere i valori del testo, ma devo cercare per trovare il posto nel codice dietro. Certamente non inserirò dieci pagine di codice nel markup, ma un semplice "testo = <% = foo.bar% > sembra molto utile. In ogni caso. – Jay

+1

Nel mondo reale spesso si ottiene qualcosa di briscola che rende qualcosa di più chiaro o più elegante –

7

<asp:Label> è in fase di compilazione in fase di runtime e la conversione in tag HTML. È possibile impostare il testo con codebehind o come questo:

<asp:Label id="Text1" runat="server" /> 
<% Text1.Text = this.Text;%> 

UPD: Sembra che la mia variante non funziona, questo è meglio:

protected void Page_Load(object sender,EventArgs e) 
{ 
    Text1.Text = this.Text; 
} 
6

Sarà necessario impostare il valore del controllo server nel codice

Prima di tutto, assegnare un ID al controllo etichetta in modo da poter accedere al controllo

<asp:Label ID="myLabel" runat="server" /> 

Poi, nella funzione Page Load, impostare il valore delle etichette 'testo' campo

protected void Page_Load(object sender, EventArgs e) 
{ 
    myLabel.Text = 'Whatever you want the label to display'; 
} 

Questa funzione sarà nel codice dietro file, oppure, se non si utilizza il codice dietro il modello, dentro la tua pagina aspx ti servirà

<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     myLabel.Text = 'Whatever you want the label to display'; 
    } 
</script> 

Buona fortuna.

44

Usa Data binding expressions

<asp:Label ID="Label1" runat="server" Text="<%# DateTime.Now %>" ></asp:Label> 

codice dietro,

protected void Page_Load(object sender, EventArgs e){ 
    DataBind(); 
} 
7

Nel mio codice sto usando qualcosa di simile, ma facilmente nel controllo databound come modello ListView Articolo

<asp:HyperLink ID="EditAction" class="actionLinks" Visible='<%#Eval("IsTrue").ToString() != "True"%>' runat="server" NavigateUrl='<%# Eval("ContentId","/articles/edit.aspx?articleid={0}")%>' /> 

Ma quando ho cercato di utilizzare al di fuori del controllo databound utilizzando <% # ..%>, è semplicemente non funziona.

Si può facilmente farlo con

<a href="<%=myHref%>">My href</a> 

Ma per i controlli server, e al di fuori del controllo databound.Dobbiamo chiamare DataBind() nel caso in pageload esplicitamente

<asp:Hyperlink ID="aa" NavigateUrl='<%#myHref%>' > 
12

si può fare questo

<asp:Label ID="Label1" runat="server" ><%= variable%></asp:Label> 
+1

Questa dovrebbe essere la risposta accettata. Nessun database richiesto. – JohnOpincar

Problemi correlati