2013-04-09 2 views
1

저는 ASP.Net MVC에 약간 새로운데, 복잡한 모델을 가지고 있습니다.기본보기에서 복잡한 모델의 여러 부분을 만듭니다.

스캐 폴딩을 사용하여 컨트롤러와 모든보기를 만들었습니다. 그러나 BuildingPermitCreate보기에서 유형의 Applicant, Area 유형의 ApplicationArea 등 세부 정보를 만드는 동일한 페이지의 모든 세부 정보를 등록하고 싶습니다. 이 일을 수행 할 수있는 방법이 있습니까?

가능하지 않은 경우 링크를 추가하여 개체를 만들 수 있습니다. 사용자가 클릭하면 페이지는 해당보기로 이동하여 페이지를 만들고 정보를 다시 가져오고 BuildingPermit의보기에 표시합니다.

귀하의 도움에 감사드립니다. 아무 문제 없습니다

답변

1

당신은 사람, 지역, 소유자에 대한 편집기 템플릿을 작성하여이를 달성 할 수있는 등의 :

~/Views/Shared/EditorTemplates/Person.cshtml 
~/Views/Shared/EditorTemplates/Area.cshtml 
~/Views/Shared/EditorTemplates/Owner.cshtml 

는 편집기 템플릿은 강력하게 입력해야 할 것입니다 및 유형에 대한 편집기 레이아웃을 제공한다 :

@model Models.Person 
<h2>Person</h2> 
<p> 
    @Html.LabelFor(model => model.Name) 
    @Html.EditorFor(model => model.Name) 
</p> 
<p> 
    @Html.LabelFor(model => model.Address) 
    @Html.EditorFor(model => model.Address) 
</p> 
// And so on 

이 호출을 완료하면 @Html.EditorFor(model => model.Applicant)이 템플릿을 선택하고 편집보기 내에 표시됩니다.

이 정보를 모두 표시하려는 경우 이러한 유형의 표시 템플릿을 만들 수도 있습니다. 이 기능은 템플릿을 DisplayTemplates 폴더에 유지하는 것을 제외하고 편집기 템플릿과 동일하게 작동합니다.

~/Views/Shared/DisplayTemplates/Person.cshtml 
~/Views/Shared/DisplayTemplates/Area.cshtml 
~/Views/Shared/DisplayTemplates/Owner.cshtml 
+0

놀라운. Person에 대한 "Edit"또는 "Create"템플릿을 복사 할 수 있습니까? "EditorTemplates"폴더에는? 그렇다면 어느 것을 복사해야합니까? –

+0

질문이 하나 더 있습니다.나는 Person의 "Create"뷰를 복사하고 편집하고 뷰에'@Html.EditorFor ... '를 추가했다. 그러나 생성 요청이 어떻게 작동하는지 잘 모르겠습니다. 내 말은, 상위 뷰 ('BuildingPermit' 위)의 제출 버튼을 클릭하면 자동으로 모든 테이블에 필요한 정보를 게시하고 저장하겠습니까? 아니면 수동으로 처리해야합니까? –

+0

스캐 폴딩 파일이 컨트롤러에 게시되도록 설정됩니다. '@ Html.BeginForm()'과 Create 또는 Edit 표제를 삭제하고 싶을 것이다. 템플릿에는 템플릿을 표시하는 데 필요한 내용, 즉 @Html.LabelFor(), @Html.TextBoxFor(), @Html.ValidationMessageFor() 등이 포함되어야합니다. –

0

, 단지 수 있도록 당신이 null 참조 예외를 방지하기 위해 어떻게 든 복잡한 객체를 초기화해야합니다 :

public BuildingPermit() 
{ 
    this.Applicant = new Person(); 
    this.ApplicantArea = new Area(); 
    ... 
} 

그런 다음 컨트롤러 액션 메소드에서 모델의 인스턴스를 생성하고보기에 전달 :

@model MyNamespace.BuildingPermit 

@Html.LabelFor(m => m.Applicant.FirstName)<br /> 
@Html.TextBoxFor(m => m.Applicant.FirstName)<br /> 

... 

<input type="submit" value="Create new building permit" /> 

하는 그런 모양 : 뷰를 들어

public ActionResult Create() 
{ 
    BuildingPermit model = new BuildingPermit(); 

    View(model); 
} 

MVC 컨트롤러에서 HttpPost을 처리하는 방법에 대한 온라인 예제를 참조하십시오.

각 개체 유형에 대해 특정 UI 부분을 만들려면 EditorForDisplayFor 템플릿을 살펴볼 수 있습니다. 원래 게시물에서 언급 한 내용에서이 정보를 찾고있을 수도 있습니다.

희망이 도움이됩니다.

+0

감사합니다. 이 방법과 @Macs에서 제안한 방법 중 어느 것이 더 "공식적인"방법입니까? –

+1

@Macs는 정말 좋은 대답입니다. 여러분이 찾고있는 것으로 보이는'EditorFor' 템플릿을 사용하는 것에 대한 좋은 설명입니다. 둘 모두 유효한 접근 방식이지만, 다른 Editor에서 Person, Area 및 Owner 객체를 편집/표시하려면 'EditorFor' 솔루션을 사용하면 더 많은 유연성을 얻을 수 있습니다. –

관련 문제