어떤 혜택이 있을 사용하여 HtmlTextWriter 지 않을 경우의 혜택을 적응 렌더링?

StackOverflow https://stackoverflow.com/questions/573722

문제

외부에서 혜택을 적응적 연출을 위해 다른 장치,아무것도 할 수 없다를 쓰는 이 모든 코드:

writer.WriteBeginTag("table");
writer.WriteBeginTag("tr");
writer.WriteBeginTag("td");
writer.Write(HtmlTextWriter.TagRightChar);
writer.WriteEncodedText(someTextVariable);
writer.WriteEndTag("td");
writer.WriteEndTag("tr");
writer.WriteEndTag("table");

때 StringBuilder 를 구축할 수 있는 동일한 것과 단순히 이:

sb.Append("<table><tr><td>");
sb.Append(someTextVariable);
sb.Append("</td></tr></table>");
도움이 되었습니까?

해결책

htmltextwriter를 사용해야하는 두 가지 이유를 생각할 수 있습니다.

  1. 작가를 사용하여 계약을 추적하여 출력 된 HTML이 한 줄에 나타나지 않고 멋지게 형식화되도록합니다.

  2. htmltextwriter는 일반적으로 출력 스트림과 관련이 있으므로 메모리에 긴 문자열을 구축하는 것보다 더 효율적이어야합니다 (생성하는 HTML의 양에 따라).

이들 중 어느 것도 특별한 이유는 아니지만 효율성이 필요할 때 작가를 사용하도록 설득하거나 재사용 될 기본 제어를 작성하고 가능한 한 전문적이어야하는 기본 제어를 작성하는 경우 충분합니다. 귀하의 마일리지가 다를 수 있습니다 :-).

다른 팁

또 다른 장점은 htmltextwriter를 사용하여 클리너 (더 유지 보수 친화적) 방식으로 코드를 포맷 할 수 있으며 HTMLTextWriter는 HTML을 자동으로 인코딩하는 것을 지원한다는 것입니다. 비교하다:

writer.AddAttribute(HtmlTextWriterAttribute.Id, "someId");
if (!string.IsNullOrEmpty(cssClass)) writer.AddAttribute(HtmlTextWriterAttribute.Class, cssClass);
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "Red");
writer.RenderBeginTag(HtmlTextWriterTag.Span);
writer.WriteEncodedText(text);
writer.RenderEndTag();

대:

StringBuilder html = new StringBuilder();
html.Append("<span");
html.Append(" id=\"someId\"");
if (!string.IsNullOrEmpty(cssClass)) html.AppendFormat(" class=\"{0}\"", HttpUtility.HtmlAttributeEncode(cssClass));
html.Append(">");
html.Append(HttpUtility.HtmlEncode(text));
html.Append("</span>");

두 번째 예제의 코드는 다른 클리너의 방식으로 작성 될 수 있다고 주장 할 수 있지만, 이는 기본적으로 하나의 정식 형식 형식의 형식 (다시 유지 보수를 향상됨)을 시행하기 때문에 HTMLTextWriter의 장점으로 볼 수 있습니다.

편집하다: 사실, 나는 실제로 두 번째 스 니펫에서 실수를 저지르고 돌아가서 응답을 수정해야했습니다. 이것은 내가 만들고 싶은 요점을 확인합니다.

htmltextwriter는 다음과 같이 유익합니다.

htmltextwriter는 가장 깨끗하고 마크 업은 렌더링 될 때 잘 들여 쓰기됩니다.

HTMLTextWriter가 출력 스트림에 직접 글을 쓰면서 성능 영향이 있습니다. StringBuilder는 Tostring이 호출 될 때까지 출력 스트림에 쓰지 않습니다.

왜 htmltextwriter를 사용하는지에 대한 예가 있습니다. HTML 출력 저장 및 재사용 여기에도.

어떤 시점에서,당신은 여전히 전달해야이 HtmlTextWriter 를 렌더링하기 위하여 클라이언트입니다.나는 당신이 작가입니다.쓰(sb.ToString());에 있는 두 번째 예에서.무엇을 할 수 있을 줄이는 라인의 코드 작성 raw HTML,정확히 동일한 방식으로에서 당신의 두 번째 StringBuilder 를 들어,사용 HtmlTextWriter.쓰고 대신 합니다.

writer.Write("<table><tr><td>");
writer.Write(someTextVariable);
writer.Write("</td></tr></table>");

다음 사용하 StringBuilder 보이 불필요합니다.고,HtmlTextWriter 것,적어도 어느 정도인지 확인 생성된 HTML 준수(지는 않지만 사실에는 위의 경우를 작성하는 경우,HTML).

내가 생각할 수있는 가장 큰 이유는 입력을 소독하기 위해 추가 단계를 밟지 않아도되기 때문입니다. 문서에 따르면 WriteEncodedText 각도 브래킷을 적절하게 자동으로 포맷합니다.

XSS 진짜 일이며, 향후 개발자가 코드를 유지하기가 더 쉽게 만들 수 있도록 할 수있는 모든 것이 이점입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top