2011-08-19 8 views
6

C#을 사용하여 asp.net 사이트 (실제로는 DotNetNuke 모듈)를 작성하고 있습니다. 코드 숨김에서 필자는 필요한 js 변수를 설정 한 다음 태그를 만들고이 태그를 HMTL <head>에 추가하려고합니다. js var은 이미지 파일에 대한 상대 URL의 (리터럴) 배열입니다. 배열에는 문자열이 포함되어 있으므로 각 항목을 따옴표로 묶어야합니다.HtmlGenericControl에서 html 인코딩 콘텐츠를 보호하는 방법은 무엇입니까?

<script></script> 사이의 문자열이 어딘가에 자동으로 HtmlEncoded되어 각 배열 항목 주위의 따옴표가 &quot;으로 바뀝니다. 이는 HtmlGenericControl이 렌더링 될 때 발생하는 것으로 보입니다. DotNetNuke가 범인이 될 수 있습니까? 누군가가 대안을 제안 할 수 있습니까? (내 컨트롤에 Page_Load 핸들러에서 실행)

내 현재 코드 : 노드가 아닌 innerText와 속성의 InnerHtml 속성을 사용하여에

HtmlGenericControl PreviewDataScriptTag = new HtmlGenericControl("script"); 
PreviewDataScriptTag.Attributes.Add("type", "text/javascript"); 
StringBuilder PreviewDataScriptCode = new StringBuilder(); 
PreviewDataScriptCode.Append("var preview_imgs = ["); 
string pathPrefix = @""""; 
string pathSuffix = @""","; 
foreach (string path in this.DocPreviewImages) 
{ 
    PreviewDataScriptCode.Append(pathPrefix + PreviewUrlBase + Path.GetFileName(path) + pathSuffix); 
} 
// Remove last comma from js code 
PreviewDataScriptCode.Remove(PreviewDataScriptCode.Length-1, 1); 
PreviewDataScriptCode.Append("];"); 
PreviewDataScriptTag.InnerText = PreviewDataScriptCode.ToString(); 
Page.Header.Controls.Add(PreviewDataScriptTag); 
+1

변수에 소문자로 사용하는 것이 좋습니다. 이것은 읽기가 혼란 스럽습니다. – Amy

+0

팁 주셔서 감사. 나는 .net에 익숙하지 않고, 대문자를 사용하기 시작했다. 닷넷 개발자는 대문자 * 객체 속성 이름을 사용하는 경향이있다. 나는 그것이 과도한 경우라고 생각합니다! – bfavaretto

답변

14

봐.

InnerHtml 속성은 HTML 엔터티와 특수 문자를 자동으로 인코딩하지 않습니다. HTML 엔티티를 사용하면 브라우저가 보통 특별한 의미를 갖는 것으로 해석하는 특수 문자 (예 : <)를 표시 할 수 있습니다. < 문자는 태그의 시작으로 해석되어 페이지에 표시되지 않습니다. < 문자를 표시하려면 엔터티 <을 사용해야합니다.

+0

감사합니다. 그 트릭을했습니다. 나는 질문을 게시하기 전에 그것을 시도했지만 어떻게 든 작동하지 않았다. 나는 다른 변수를 잃어 버렸음에 틀림 없어! 바보 야! – bfavaretto

+0

+1 : 이것은 나를 위해 일했습니다! –

관련 문제