2010-11-29 2 views
1

이것은 회상 중 하나였으며 몇 가지 추가 피드백과 현장 검사가 필요했습니다. 우리는 현재 부 울린 플래그에 기반하여 활성화/비활성화하는 여러 가지보기를 가지고 있습니다 (Model.IsNew가 예제입니다). 뷰는 가능한 한 단순해야하며 컨트롤러는 뷰의 데이터를 결정해야한다고 생각합니다. 나는 부분적이거나 전체적인 견해가 무엇인지를 보여주고 처리해야하는 것이 무엇인지를 보여주고 숨겨야 하는지를 결정해야한다고 생각합니다. 아주 기본적인 예제는 다음과 같습니다. 그러나 이것의 양면을 다루며 대부분 우리가 가지고있는 것을 반영합니다 ...MVC에서 여러 개의보기와 하나의 "복잡한"보기

컨트롤러에는 세부 정보 (게시/가져 오기) 한 쌍이 있습니다. [가져 오기] 세부 정보에는 단일 매개 변수가 있습니다. Id 및 [게시] 세부 정보는 ID와 뷰 모델을 사용합니다. 게시물 내에서 메서드는 유효 모델을 확인하는 데 ~ 30 줄의 길이를 가지며 특정 값이 변경된 경우 새로 지정되는지 (리디렉션을 트리거하는지) 등을 결정합니다 (잘못된 것으로 생각합니다). [Get] Details는 빈 ID를 확인하고 필요한 드롭 다운을 채 웁니다. 공상에 들지 않습니다 (이게 옳다고 생각합니다). 자세히보기 자체에 약간의 논리가 포함되어 있습니다. If (! Model.IsNew) {RenderAction (History => History.Show (id);} (if가 잘못 나온 경우 Show는 표시 할 내용을 알고 있어야하며, (세부 사항/추가는 상태에 따라 일부 비활성화 된 필드를 제외하고 거의 동일합니다.) - 엔티티 값이 편집 여부 만들기/삭제 된 비활성화 할 수 있습니다.

생각, 의견, 통찰력?

답변

5

이유는 여러 뷰 및 작업을 생성하지?

Details 

Edit 
[HttpPost] 
Edit 

Create 
[HttpPost] 
Create 

그런 다음 그들이 모델 객체

public ThingModel 
{ 
    public Thing Thing { get; set; } 
} 

를 공유하거나 만들기가 편집 작업은 안전한 (HTML 인젝션을 방지) 모델을 사용할 수있는 또한 내장 유효성 검사 옵션을 사용하게됩니다.

public ThingEditorModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Value { get; set; } 
    public bool IsNew { get { return Id == 0; } } 
} 

그런 다음 편집 및 만들기를 위해 만들기 및 수정이 공유 할 수있는 EditorTemplate (Shared/EditorTemplates/ThingEditor.ascx)을 만들 수 있습니다.

+0

나는 동의한다. 가능한 한 더 많이 나눠서 재사용하고 남용 할 수 있다고 생각한다. 좋아, 그럼 내가 기지에서 벗어난 게 아니야? – jeriley

0

올바른 트랙에 있다고 생각합니다. '기본'보기 사용 레이아웃을 사용하고 '논리'에 대해 템플리트 도우미를 사용하십시오. Html.DisplayFor (x => x.Thing) 및 EditorFor에 기대어

당신은 분명히 두 곳에서 레이아웃을 원하지 않습니다.

+0

왜이 사람이 투표 할 이유가 확실하지 않은지 ... 내 생각과 똑같은 생각 – hunter

+0

모두 좋다, 나는 양쪽 모두에 동의하고 -1을 내었다. – jeriley

관련 문제