2011-08-31 2 views
4

전체 페이지를 데이터 바인딩 할 때, 나는 다음과 같이 할 것입니다 :ASP.NET 코드 블록 (예 : <%= %>)이 페이지 수명주기에서 실행되는시기는 언제입니까?

어쩌구 ...

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

그리고 그것은 아름답게 작동합니다. 그러나 종종 전체 페이지에 데이터 바인딩을 사용하지 않고 "고전적인"ASP.NET 방식으로 작성합니다. 예를 들어, 뒤에있는 코드에서 나는 다음과 같은 것을 갖게 될 것이다 :

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

그리고 나서 .aspx는

을 가질 것이다
<asp:label runat="server" id="lblSomeMessage"/> 

그러나 는 둘 다을하고 싶다. 내가 뭘하고 싶은 건 데이터 바인딩 구문을 사용하는 대신 코드 블록 :

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

아니오 출력 태그 구문. 질문은, 언제이 태그가 실제로 평가 될 것인가입니다. OnPreRender 이벤트가 발생할 때까지 SomeProperty 속성을 설정하지 않은 것으로 가정합니다. 너무 늦었 니? 내 테스트에서 실제로 이렇게 :

및 stacktrace 따라 :

ASP.webform1_aspx .__ Renderform1 (HtmlTextWriter __w, Control parameterContainer) System.Web.UI.Control. System.Web.UI.HtmlControls.HtmlForm.RenderChildren (HtmlTextWriter writer)에서 RenderChildrenInternal (HtmlTextWriter 작성자, ICollection 하위) ...

렌더링 중에 발생하며 완벽합니다. 그러나 이것이 보장 되나요? 이 규칙에 어떤 어려움이 있습니까?

+2

fyi : 가능할 때마다'<% :'대신'<% :'를 사용하십시오. 자동으로 출력을 html로 인코딩하고 원하는 경우 인코딩 엔진을 변경할 수도 있습니다. –

+0

동의 함. 이 특별한 경우에는 정적 문자열을 출력하지만 잘 찍었습니다. – aquinas

답변