什么是ASP.NET代码块,例如<%=%>在页面生命周期中执行?

时间:2011-08-31 00:30:21

标签: asp.net page-lifecycle

当我对整个页面进行数据绑定时,我会做这样的事情:

Blah等等......

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

这是美丽的。但是,我经常不会对整个页面使用数据绑定,而是使用“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输出标签语法。现在,问题是,这个标签何时才会被评估?假设在OnPreRender事件之前我没有设置SomeProperty属性。这太晚了吗?在我的测试中,我实际上是这样做的:

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

根据stacktrace:

  

ASP.webform1_aspx .__ Renderform1(HtmlTextWriter __w,Control   parameterContainer)at   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,   ICollection孩子们)   System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter的   作家)...

它在渲染过程中发生,这是完美的。但这有保证吗?这条规则有什么问题吗?

1 个答案:

答案 0 :(得分:5)

是的,保证是Render

“嵌入式代码块是在页面呈现阶段执行的服务器代码。” - http://msdn.microsoft.com/en-us/library/ms178135.aspx