2012-08-13 22 views
5

Ho un controllo web che assomiglia a questoutilizzando <%= %> o <%# %> con runat = server ASP.NET

 
public class Foo : WebControl 
{ 
    [Bindable(true)] 
    [Category("Default")] 
    [DefaultValue("")] 
    [Localizable(true)] 
    public string Bar { get; set; } 

    protected override void Render(HtmlTextWriter output) 
    { 
    output.WriteLine(Bar); 
    } 
} 

voglio mettere questo WebControl nella mia pagina aspx in questo modo:

 
<cc1:Foo Bar="<%= Fa.La.La %>/otherstuff" runat="server" /> 

(ovviamente questo codice è semplificato per mostrare il problema)

Nel mio metodo Render la variabile Fa.La.La non viene valutata. Arriva come testo "<% = Fa.La.La%>" Come posso valutarlo?

Non sono particolare di come vengono passate le variabili. Se le variabili possono essere valutate se vengono passate come <% # ...%, ciò funziona correttamente. Il punto è che ho alcune variabili lato server che voglio valutare prima/mentre viene chiamato il mio metodo Render().

L'unica cosa che mi viene in mente è quello di utilizzare una regex per afferrare il contenuto di <% = ...%> e l'uso di riflessione o qualcosa del genere, ma ci deve essere un modo più elegante per fare questo.

Questa domanda è molto simile a using server variables in a href <%= xx %> with runat=server, ma non è esattamente la stessa poiché nessuna delle risposte era utile.

+0

Provare a utilizzare questo Nota citazione singola e doppia citazione differenza. Spero che possa risolvere il problema – Moons

risposta

2

È necessario utilizzare l'espressione di associazione <%# expr %>.

<cc1:Foo Bar='<%# String.Concat(Fa.La.La,"/otherstuff")%>' runat="server" /> 

e chiamare il metodo DataBind() nel code-behind.

public void page_load() 
{ 
    DataBind(); 
} 
+1

Per espandere questa risposta, non puoi fare qualcosa del tipo: Bar = "<% # Fa.La.La%>/otherstuff" Viene appena visualizzato alla lettera. L'espressione di associazione dati deve essere l'unica cosa nell'attributo, ad esempio Bar = '<% # String.Concat (Fa.La.La, "/ otherstuff")%>' Inoltre, le virgolette esterne devono essere singole -quotes e le citazioni interne dovrebbero essere doppie virgolette (supponendo C#, comunque). – mhenry1384

5

Bene, in primo luogo si dovrebbe essere chiari per diff tra entrambi i tag. Ecco alcuni punti che ho letto ed utilizzato praticamente ..

  • I <%= espressioni vengono valutate in fase di rendering
  • I <%# espressioni sono valutate al DataBind() tempo e non vengono valutati affatto se DataBind() è non chiamato.
  • <%# le espressioni possono essere utilizzate come proprietà nei controlli lato server. Le espressioni <%= non possono.

saperne di più su MSDN Blog

Problemi correlati