2011-08-31 46 views
4

当我数据绑定的整个页面,我会做这样的事情:什么时候在页面生命周期中执行ASP.NET代码块,例如<%= %>?

等等等等......

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

这工作beatifully。但是,我通常不会在整个页面上使用数据绑定,而是使用“clasic”ASP.NET方式编写事务。例如,在后面的代码,我会碰到这样的:

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

然后会的.aspx有

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

但我想这样做既...类的东西。我想要做的不是使用数据绑定语法,而是使用代码块:

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

Noe输出标记语法。现在的问题是,这个标签什么时候会被评估呢?假设我没有设置SomeProperty属性,直到OnPreRender事件。这是为时已晚?在我的测试我确实是这样的:

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

而且根据堆栈跟踪:

ASP.webform1_aspx .__ Renderform1(HtmlTextWriter的__w,控制 parameterContainer)在 System.Web.UI.Control。 RenderChildrenInternal(HtmlTextWriter的作家, ICollection的孩子)在 System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter的 作家)...

它在渲染过程中发生,这是完美的。但这是有保证的吗?任何陷入这个规则?

+2

fyi:只要可以,就用'<%:'代替'<%='。它会自动对输出进行html编码,如果需要,甚至可以更改编码引擎。 –

+0

同意。在这个特定的情况下,我输出一个静态字符串,但点好了。 – aquinas

回答