2011-08-31 1 views
4

Quand je Databinding une page entière, je vais faire quelque chose comme ceci:Quand les blocs de code ASP.NET sont-ils, par exemple, <%= %> exécutés dans le cycle de vie de la page?

Bla bla ...

<%# SomeProperty == "GoodBye" ? "See you later" : "Hello" %> 

et qui fonctionne beatifully. Cependant, souvent, je n'utiliserai pas la liaison de données pour une page entière et j'écrirai des choses de façon "classique" ASP.NET. Par exemple, dans le code derrière je vais avoir quelque chose comme:

lblSomeMessage.Text = SomeProperty == "GoodBye" ? "See you later" : "Hello"; 

Et .aspx serait alors

<asp:label runat="server" id="lblSomeMessage"/> 

Mais ce que je veux faire à la fois ... en quelque sorte. Ce que je voudrais faire n'est pas utiliser la syntaxe de liaison de données mais à la place un bloc de code:

<%= SomeProperty == "GoodBye" ? "See you later" : "Hello" %> 
^^^^ 

Noe la syntaxe de balise de sortie. Maintenant, la question est, quand cette étiquette sera-t-elle réellement évaluée? Supposons que je ne définisse pas la propriété SomeProperty jusqu'à l'événement OnPreRender. Est-ce trop tard? En fait, je l'ai fait dans mon test ceci:

<%= SomeProperty == "GoodBye" ? + new System.Diagnostics.StackTrace().ToString() : "OH NO!" %> 

Et selon le stacktrace:

ASP.webform1_aspx .__ Renderform1 (HtmlTextWriter __W, contrôle parameterContainer) à System.Web.UI.Control. RenderChildrenInternal (écrivain HtmlTextWriter, enfants ICollection) à System.Web.UI.HtmlControls.HtmlForm.RenderChildren (HtmlTextWriter scénariste) ...

Cela arrive pendant le rendu, ce qui est parfait. Mais est-ce garanti? Des pièges à cette règle?

+2

fyi: utilisez '<%:' au lieu de '<% =' chaque fois que vous le pouvez. Il html-encode automatiquement la sortie, et vous pouvez même changer le moteur d'encodage si vous voulez. –

+0

D'accord. Dans ce cas particulier, je suis en train de sortir une chaîne statique, mais point bien prise. – aquinas

Répondre

Questions connexes