2011-10-18 5 views
0

데이터 바인딩과 관련이없는 페이지에서 원래 프로그래머가 <%# ... %>을 사용하는 일부 코드가 나타납니다. 문자열을 페이지에 출력하는 데 사용됩니다. 이거 안전한가요? <%#은이 경우 <%= 또는 <%:처럼 동작합니까?데이터 바인딩 방식이 아닌 <% #을 사용하는 것이 안전합니다.

+1

Page.DataBind가 호출되지 않았습니까? –

+1

오른쪽. DataBind가 호출되지 않으면 아무 것도 출력되지 않습니다. –

+0

중첩 된 마스터 페이지를 사용할 때 콘텐츠 위치 홀더에 동적 링크 URL을 배치 할 때 설명하는 것과 유사한 기술을 사용했습니다. ASP.NET은 동적 코드 ('<% =')를 중첩 된 작업 공간 홀더가있는 작업 공간 홀더에 넣으면 불평합니다. 그것을 <% # Page.ResolveUrl ... '로 바꾸면 Page.DataBind를 코드에서 호출하여 두 시나리오를 모두 지원할 수 있습니다. 훌륭한 해결책은 아니지만 작동합니다. –

답변

1

는 <퍼센트 =이 경우 또는 <% 같은 <% 번호 동작합니다합니까?

태그 안의 코드가 Response.Write() 또는 이와 유사한 함수를 명시 적으로 호출하는 경우에만.

1

< % # ... %> 사이의 표현식이 평가되고 문자열로 변환됩니다. 결과는 컨트롤의 속성에 할당되고 컨트롤이 없으면 DataBoundLiteralControl이 추가됩니다. 안전 해요? 예. 처음에 페이지에 액세스하면 ASP .Net은이를 구문 분석하고 새 클래스를 생성하며이 블록의 코드를 포함하여 어셈블리로 컴파일합니다.


, 그것은되는 상기 HtmlTextWriter.Write 법에 의해 사용되며, 게다가, <% = ... %> 사이 이전과 동일하게 작용하지만, 그 결과는 어떤 속성에 할당되지 btw는 void를 반환하므로 데이터 바인딩 식에서 사용하려고하면 작동하지 않습니다.


무엇에 대해 :

이것은, 양쪽 구조에서 사용할 수는 : 평가 된 문자열 System.Web.HttpUtility.HtmlEncode를 통해 인코딩 된 HTML이기 때문에, 안전 플러스. 데이터 바인딩을 사용하여 < % # 또는 작성자 구조 < % :(= 제외)와 함께 사용할 수 있습니다. , 컴파일 오류를 줄보기 전체 컴파일 소스를 클릭하고, 그 라인으로 이동합니다 구조에서



쓰기 뭔가. 블랙 박스는 더 이상 블랙 박스가 아닙니다.

관련 문제