2017-03-13 13 views
0

MVC 사이트를 상속 받았으며 두 페이지를 하나로 결합하도록 요청 받았습니다. 두 뷰 모두 자체 뷰 모델을 가지고 있기 때문에 두 VM을 함께 밀어 넣는 대신 부분 뷰를 사용하여 Clock_Detail이라는 뷰의 시계 그룹을 표시 할 수있었습니다. 그러나 ClockId에 대한 데이터를 채우기 위해 GroupId를 가져와야합니다.매개 변수를 MVC 부분보기에 전달하는 데 혼동이 있습니까?

그래서 Partial Views를 거의 사용하지 않으면 어떻게 작동하는지 혼란 스럽습니다. _ClockGroup.cshtml이라는 새보기를 작성하고 다른 페이지의 기본 코드를 복사하여 붙여 넣기 만하면 표시 할 항목이 있는지 확인할 수 있습니다.

내 ClockDetail 컨트롤러에 다음을 추가했습니다.

public PartialViewResult ClockGroup(int groupId) 
{ 
    ClockGroupViewModel vm = DAL.GetClockGroupDetail(groupId); 
    return PartialView(vm); 
} 

여기 이것은 clock_detail.cshtml 뷰 내지 _ClockGroup.cshtml

@model site.Models.ViewModels.ClockGroupViewModel 

<div class="form-group"> 
    @Html.LabelFor(m => m.GroupId, htmlAttributes: new { @class = "control-label col-md-2" }) 
    @Html.EditorFor(m => m.GroupId, new { htmlAttributes = new { @class = "form-control", disabled = "disabled", @readonly = "readonly" } }) 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.GroupName, htmlAttributes: new { @class = "control-label col-md-2" }) 
    @Html.EditorFor(m => m.GroupName, new { htmlAttributes = new { @class = "form-control", autofocus = "autofocus" } }) 
    @Html.ValidationMessageFor(m => m.GroupName, "", new { @class = "text-danger" }) 
</div> 

이다. 다음 모델을 사용하고이 뷰에 부분을 추가했습니다.

@model site.Models.ViewModels.ClockDetailViewModel 

@Html.Partial("_ClockGroup") 

은 물론 나는 모델이 사전 유형 “site.Models.ViewModels.ClockDetailViewModel”을 통과한다는 오류가 있지만 사전은 시간 “site.Models.ViewModels.ClockGroupViewModel"의 모델 항목을 필요로한다.

두 개의 ViewModel을 함께 결합하고 단일 ViewModel 만 사용해야합니까?

+0

부분적으로 코드를 작성하는 방법에 따르면 [템플릿 대신]을 사용하는 것이 좋습니다 (http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor- templates.html). 템플릿은 훨씬 더 읽기 좋고 템플릿을 호출하면 쉽게 진단 할 수 있기 때문에 템플릿이 유리합니다. 부분품을 사용하는 것은 드뭅니다. –

+0

템플릿을 살펴 보겠습니다. 나는 코드의 유지 보수성을 돕기 위해 무언가를 시도하는 데 항상 열려있다. – Caverman

답변

1

두 번째 매개 변수로 개체를 지정하지 않은 :

@Html.Partial("_ClockGroup") 

그것은 자동으로 ClockDetailViewModel

귀하의 부분적인 유형 인 현재의 모델을 통과는 것 ClockGroupViewModel

수정을 입력해야합니다 ClockDetailViewModel 개체의 속성에서 부분 통화를 호출 할 때 :

@Html.Partial("_ClockGroup", Model.ClockGroupViewModelProperty) 

ClockDetailViewModel 클래스에 ClockGroupViewModel 속성이없는 경우 해당 속성을 ViewModel에 추가하고 데이터를 채워야합니다.

+0

모델을 전달하지 않고 현재 모델을 통과 한 부분을 읽었을 때 그 부분이 문제의 일부라고 생각했습니다. 그러나 ClockGroupViewModel을 부분에 전달하는 방법을 알 수 없습니다. 내 ClockDetailViewModel에는 ClockGroupViewModel 속성이 없습니다. 나는 그 일을 끝내기 위해 내가해야 할 일을 조사 할 필요가있을 것 같다. 고마워요 ... – Caverman

+0

데이터베이스 트립에 두 번 담그고있는 것처럼 느껴지지만 적어도 코드 묶음을 다시 쓰지 않아도 작동 할 것 같습니다. – Caverman

+0

... 여기 뷰 모델에 대해 이야기하고 있다고 생각했습니다. 뷰 모델은 뷰가 의존하는 데이터의 컨테이너 일뿐입니다. 뷰 모델은 데이터베이스 모델을 1 : 1로 표현하지 않아야합니다. – maccettura