当我对整个页面进行数据绑定(bind)时,我将执行以下操作:
呸呸呸……
<%# SomeProperty == "GoodBye" ? "See you later" : "Hello" %>
而且效果很好。但是,我通常不会对整个页面使用数据绑定(bind),而是以“经典”ASP.NET 方式编写内容。例如,在后面的代码中,我会有类似的内容:
lblSomeMessage.Text = SomeProperty == "GoodBye" ? "See you later" : "Hello";
然后 .aspx 会有
<asp:label runat="server" id="lblSomeMessage"/>
但我想做的都是……有点。我想做的不是使用数据绑定(bind)语法,而是使用代码块:
<%= SomeProperty == "GoodBye" ? "See you later" : "Hello" %>
^^^^
没有输出标签语法。现在的问题是,这个标签什么时候会被实际评估?假设我在 OnPreRender 事件之前不设置 SomeProperty 属性。是不是太晚了?在我的测试中,我实际上是这样做的:
<%= SomeProperty == "GoodBye" ? + new System.Diagnostics.StackTrace().ToString() : "OH NO!" %>
并根据堆栈跟踪:
ASP.webform1_aspx.__Renderform1(HtmlTextWriter __w, Control parameterContainer) at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) at System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)...
它发生在渲染期间,这是完美的。但这能保证吗?这条规则有什么陷阱吗?
最佳答案
是的,保证是Render
.
“嵌入式代码块是在页面呈现阶段执行的服务器代码。” - http://msdn.microsoft.com/en-us/library/ms178135.aspx
关于asp.net - ASP.NET 代码块何时在页面生命周期中执行,例如 <%= %>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251330/