문제

에 관해 많은 논의가 있어왔습니다. 뷰 엔진 ASP.NET MVC에 대한 그리고 for-loop를 포함한 인라인 "tag-soup"에 대한 몇 가지 비판이 있습니다.

대안 또는 보완책은 인라인 메서드 호출인 HTML 도우미를 사용하는 것이었습니다.

현재 ASP.NET MVC의 HTML 도우미를 살펴보면 다음과 같은 클래스를 사용하고 있습니다. 태그빌더.

내 제안은 강력한 형식과 올바른 형식의 (X)HTML을 얻으려면 LINQ to XML을 사용하세요.:

XDocument output = new XDocument();
XElement root = new XElement("div",
    new XAttribute("class", "root_item"));

XElement iconImage = new XElement("img",
    new XAttribute("src", ResolveUrl("~/image.gif")),
    new XAttribute("alt", "This is an image"));

XElement link = new XElement("a",
    new XAttribute("class", "link"),
    new XAttribute("href", "http://google.com"),
    new XText("Link to Google"));


root.Add(link);
root.Add(iconImage);
output.Add(root);

저는 WebForms의 강력한 형식의 컨트롤과 같아서 Button을 새로 만들고 다른 컨트롤의 Control 컬렉션에 추가할 수 있기 때문에 마음에 듭니다.

여기에 명백한 문제나 제한 사항이 있습니까?

도움이 되었습니까?

해결책

위에서 언급한 방법에는 두 가지 문제점이 있다고 생각됩니다.첫 번째,

XElement iconImage = new XElement("img",
new XAttribute("src", ResolveUrl("~/image.gif")),
new XAttribute("alt", "This is an image"));

위에 쓴 내용을 참조하면 다음과 같은 내용을 얻을 수 있습니다.

<img src=<%=whatever%> alt=<%=whatever%> />

이것은 개인적인 판단일 수도 있지만, 나는 "인간이" 읽을 수 있는 후자에 확실히 투표합니다.맞습니다. LINQ 2 XML을 사용하면 내 aspx 페이지에서 돌아다니는 이상한 <% } %>를 제거할 수 있지만 동시에 그 "좋은 소년"을 서투르게 보이게 만듭니다.

두 번째는 성능 문제가 발생할 수 있습니다.이에 관한 데이터는 없지만 LINQ 2 XML을 구문 분석하고 실행하는 것은 상당히 느릴 수 있다고 생각합니다.

개인적으로 저는 여전히 MVC 프레임워크를 실험하고 있습니다. 창/GUI-OOP 지향 ASP Dot Net Framework 대신 거의 모든 대화형 부분이 명시적으로 처리되기 때문에 ASP 또는 PHP 3.X와 같은 옛날로 돌아가는 것 같은 느낌이 듭니다.제가 MVC를 사용하는 주된 이유는 클라이언트측 HTML 코드의 최고 품질을 보장할 수 있기 때문이라고 생각합니다.

다른 팁

이것은 좋은 생각입니다! 내가 보는 유일한 문제는 C#사용입니다. ;) vb.net은 XML 리터럴 기능을 통해 XML을 생산하는 데 훨씬 더 나은 지원을 제공합니다.

질문에 나열된 코드는 vb.net에서 다음과 같이 작성 될 수 있습니다. (텍스트 추가로 "이것은 링크입니다" 예제에는 텍스트가 포함되지 않았으므로 a 요소.)

Dim root = <div class="root_item">
               <img src=<%= ResolveUrl("~/image.gif") %> alt="This is an image"/>
               <a class="link" href="http://google.com">This is a link</a>
           </div>

여전히 있습니다 <%= ... %> 태그이지만 컴파일 시간에 유효성을 확인합니다. 이 코드가 유형 Xlement를 반환 한 함수의 반환 값을 만들면 XHTML 스 니펫이 사이트의 다른 곳에서 재사용 될 수 있습니다.

CodePlex에 vb.net XML 리터럴을 사용자 정의 ASP.NET MVC 뷰 엔진으로 사용하는 프로젝트가 있습니다. http://vbmvc.codeplex.com. 코드를 기반으로합니다 드미트리 로즈맨, Microsoft의 ASP.NET의 제품 단위 관리자 인 누가 보기는 vb.net 클래스이며 마스터 페이지는 기본 클래스입니다. 너 새로운 부분보기 클래스는 이름 문자열로 참조하는 대신 클래스를 참조하여 추가 컴파일 시간 확인이기도합니다. 문자열을 반환하는 htmlhelper 클래스 대신 xlement를 반환하고 제안한 것과 유사하게 작동하는 xhtmlhelper 클래스가 있습니다.

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