2009-08-20 4 views
8

ASP.NET MVC 2 Preview 1의 새로운 기능 중 하나는 미리 정의 할 수있는 Editor Templates 및 Display Templates의 개념을 지원합니다 주어진 객체는 간단한 HTML 도우미 호출로 표시하거나 편집 렌더링되는 방법 :ASP.NET MVC 2 - 템플릿 사용시기와 부분 뷰 사용시기

<%=Html.EditorFor(customer => customer) %> 
<%=Html.DisplayFor(customer => customer) %> 

이것은 정말 멋진,하지만 난 정말이 같은 기능을하는 부분보기의 차이를 볼 수 없습니다 . 또한 예제에서 편집기 템플릿에는 실제 양식 태그가 포함되어 있지 않으며 특정 클라이언트 측 기능을 특정 편집기 (예 : jQuery)에 제공해야하는 경우 해당 코드를 안전하게 배치 할 수 없습니다. 왜냐하면 나는 정적 인 핸들을 가지고 있지 않기 때문에 클라이언트에 로직을 추가하고 있기 때문이다. 내가 편집하고있는 응용 프로그램에서는 편집 템플릿과 부분 뷰를 혼합하여 내용을 편집합니다. 양식의 복잡성에 따라 편집기를 만들었는데 다른 방법보다 한 가지 방법을 선택했습니다. 그러나 이것은 물론 응용 프로그램에 바람직하지 않은 수준의 불일치를 추가합니다.

부분 뷰를 통해 템플릿을 사용하는 이유는 무엇입니까? 또한 에디터 템플릿을 사용할 때 클라이언트 측 로직을 에디터를 사용하는 모든 뷰에 복사하지 않고 에디터에 추가하는 가장 이상적인 방법은 무엇입니까?

답변

3

ScottGu는 그의 blogpost about MVC V2에서이 중 일부를 설명합니다.

내가 수집 한 것에서 도우미에게 전달하는 개체의 각 속성에 대한 입력이 생성됩니다.

public class Customer 
{ 
    public string Name { get; set; } 
    [UIHint("MyCoolCalendar")] 
    public DateTime CoolDate { get; set; } 
} 

그리고 편집자 만들 :

<%= Html.EditorFor(customer => customer) %> 

그것은 고객의 이름에 대한 텍스트 입력을 생산하는 것, 그리고 (인 customdefined 제어)를 MyCoolCalendar 당신은 개체가 그래서 경우 CoolDate는 전체 개체를 래핑하기 위해 사용자 지정 컨트롤을 작성하지 않아도됩니다. 그것은 자동으로 속성의 유형/책임에서 컨트롤의 유형을 추론합니다. 적어도 이것은 아직 그것을 테스트 할 시간이 없다면 그것을 이해 한 것입니다.

+0

씨 번지의 게시물을 읽고 그리고 그것은 EditorFor 개별 필드와 전체 개체에 모두 사용될 수 있음을 설명한다. 나는 위의 시나리오에서 후자의 경우를 언급하고있다. –

+0

오케이. 그는 또한 게시물의 목적을 다음과 같이 명시하고 있습니다. "기본적으로 객체의 공개 속성을 반복하여

+0

그래서 사용자 정의 필드를 처리하는 것과 같은 특별한 작업을 수행 할 필요가없는 한 EditorFor (SomeObject)를 호출 할 때 템플릿을 명시 적으로 정의 할 필요가 없다고 할 수 있습니다. –

0

다음은 잘 작동하는 한 예입니다.

주소가있는 고객이 있다고 가정 해 보겠습니다. 새 고객에 대한 주소를 만들 수는 없지만 Association을 통해 필드 주소가있는 고객 Customer를 가질 수 있습니다.

그런 다음 고객을위한 "만들기"메서드에서 Html.EditorFor(c => c.Address);을 호출합니다. 여기에서 완전히 채워진 주소 개체를 생성하는 사용자 지정 템플릿을 만들 수 있습니다.이 개체는 고객보다 먼저 저장할 수 있으므로 종속성을 해결할 수 있습니다.

국가 목록 또는 국가와 같은 참조 데이터가있는 경우 부분 뷰를 사용하여 렌더링하고 연관성에 신경 쓰지 않는 것이 좋습니다. 이 도움이

희망,

-vlad