문제

직장에서 ASP.NET 웹 응용 프로그램을 개발 중인데 계속 같은 문제가 발생합니다.

때로는 코드 숨김에서 페이지에 HTML을 작성하고 싶을 때가 있습니다.예를 들어, get variable의 값 "보기"의 ​​값에 따라 다른 페이지, editor.aspx가있는 페이지가 있습니다. 다시 말해, "editor.aspx? view = 사과"는 "editor.aspx? view = oranges"와 다른 HTML을 출력합니다.

현재 StringBuilder를 사용하여 이 HTML을 출력하고 있습니다.예를 들어 목록을 생성하려면 다음 구문을 사용할 수 있습니다.

myStringBuilder.AppendLine("<ul id=\"editor-menu\">");
myStringBuilder.AppendLine("<li>List Item 1</li>");
myStringBuilder.AppendLine("</ul>");

문제는 이 목적으로 ASP.NET의 목록 컨트롤을 사용한다는 것입니다. 왜냐하면 StringBuilder 구문의 여러 줄이 코드의 가독성을 방해하기 때문입니다.그러나 ASP.NET 컨트롤은 고유 ID, 인라인 스타일 및 가끔 인라인 JavaScript 블록을 사용하여 복잡한 HTML을 출력하는 경향이 있습니다.

제 질문은 일반 HTML 태그만 나타내는 ASP.NET 컨트롤이 있습니까?입니다.즉, 다음 예와 같은 컨트롤이 있습니까?

HTMLTagControl list = new HTMLTagControl("ul");
list.ID = "editor-menu";
HTMLTagControl listItem = new HTMLTagControl("li");
listItem.Text = "List Item 1";
list.AppendChild(listItem);

래퍼 등이 있다는 것을 알고 있지만 ASP.NET 복잡성을 길들이는 대신 처음부터 단순함부터 시작하는 것이 좋습니다.

도움이 되었습니까?

해결책

ASP.NET 컨트롤이 있습니까? 단순히 일반 HTML 태그를 나타냅니까?

응, 그거라고 해. HtmlGenericControl :)

정확히 원하는 것은 아니지만 쉽게 해결할 수 있습니다.

HtmlGenericControl list = new HtmlGenericControl("ul");
list.ID = "editor-menu";
HtmlGenericControl listItem = new HtmlGenericControl("li");
listItem.InnerText = "List Item 1";
list.Controls.Add(listItem);

정말로 베어메탈로 돌아가야 한다면 다음을 사용해야 합니다. HtmlTextWriter 원시 HTML을 펌핑하는 데 더 적합하므로 StringBuilder 대신 클래스를 사용합니다.

다른 팁

stringbuilder의 결과를 빈 컨트롤에 할당하려면 다음을 사용할 수 있습니다. <asp:Literal /> 이에 대한 통제.

LiteralControl에는 HTML을 전달할 수 있는 생성자가 있습니다.내 생각엔 그게 더 나은 것 같아.

new LiteralControl(sb.ToString());

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