전체 페이지를 데이터 바인딩 할 때, 나는 다음과 같이 할 것입니다 :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 하위) ...
렌더링 중에 발생하며 완벽합니다. 그러나 이것이 보장 되나요? 이 규칙에 어떤 어려움이 있습니까?
fyi : 가능할 때마다'<% :'대신'<% :'를 사용하십시오. 자동으로 출력을 html로 인코딩하고 원하는 경우 인코딩 엔진을 변경할 수도 있습니다. –
동의 함. 이 특별한 경우에는 정적 문자열을 출력하지만 잘 찍었습니다. – aquinas