2013-02-18 4 views
0

내보기에 2 이 있어야합니다. 그러나 우리는 오직 하나의 뷰를 추가 할 수 있었기 때문에 다음과 같은 접근법을 취했습니다.보기에 여러 모델을 추가하는 중 오류가 발생했습니다.

@model Tuple<My.Models.Mod1,My.Models.Mod2> 

    @Html.DropDownListFor(m => m.Item2.humanKind,Model.Item2.allHuman) 


    @Html.TextBoxFor(m => m.Item1.food) 

하지만 결국 나는 다음과 같은 오류가 발생합니다.

The model item passed into the dictionary is of type 'My.Models.Mod2', but this dictionary requires a model item of type 'System.Tuple`2[My.Models.Mod1,My.Models.Mod2]'. 

이것은 무엇이며 어떻게 해결할 수 있습니까? 문제의 뷰만을 My.Models.Mod2보다는 Tuple<My.Models.Mod1,My.Models.Mod2> 건네 컨트롤러 액션 호출되는

public ActionResult Index() 
     { 
      var model2 = new Mod2 { allHuman = allHumans() }; 
      var model1 = new Mod1(); // JUST NOW I ADDED THIS, BUT IT DOESn't WORK 
      return View(model1,model2); 

     } 
+1

컨트롤러 코드를 게시하십시오. –

+0

이'@model Tuple '코드 라인에 대한 답. – sigod

+0

죄송합니다. @EricJ. 나는 잘못 생각했다. –

답변

1

UPDATE.

이보기를 호출하는 특정 컨트롤러 동작을 다시 확인하십시오. 당신은 별도의 매개 변수로보다는 튜플로 모델 1과 모델 2를 전달하는

return View(new Tuple<My.Models.Mod1,My.Models.Mod2>(model1, model2>); 

UPDATE

컨트롤러 코드

return View(model1,model2); 

이 있어야한다.

+0

코드를 편집했지만 여전히 작동하지 않습니다. . –

+0

게시 한 컨트롤러 코드를 기반으로 제 대답이 업데이트되었습니다. –

0

뷰로 보내기 전에 튜플 인스턴스를 만들지 않습니다.

public ActionResult Index() 
{ 
    var model2 = new Mod2 { allHuman = allHumans() }; 
    var model1 = new Mod1(); 
    return View(new Tuple<Mod1,Mod2>(model1,model2)); 
} 
1

보기 당 하나의 모델 만있을 수 있습니다. Ufuk가 제안한대로 Tuple을 인스턴스화해야합니다.

그러나 다른 모델을 속성으로 사용하는 새로운 모델을 만드는 것이 좋습니다.

+1

여러 모델을 해킹하려는 것은 좋은 생각이 아니며 유지 관리가 지저분해질 것이라는 점에 동의합니다. renderpartial/renderaction을 사용하는 것이 좋습니다. –

1

빌드를 모두 포함하는 뷰 모델 :

Public class CompositeViewModel{ 
Public Mod1 mod1 {get;set;} 
Public Mod2 mod2 {get;set} 
} 

그런 다음 구성하고 볼 수 CompositeViewModel를 전달합니다. 모델로 CompositeViewModel을 사용하도록 뷰를 설정하십시오. @model CompositeViewModel

튜플을 사용하면 쉽게 확장하거나 변경할 수 없습니다.

데이터가있는 ViewModel 하나가있는 것처럼 보일 수도 있습니다. 그런 다음 일부 데이터는 IEnumerable<SelectListItem>과 연결됩니다. 그렇다면 ViewModel에 CreateAnimalTypeViewModel과 같은 이름을 지정합니다. CreateAnimalTypeViewModel에는 필요한 모든 속성이 포함되어 있으며 다양한 선택 목록이 있습니다.

무언가에서 ViewModel로 매핑해야하는 경우. 기존 항목을 편집하고 있다면 AutoMapper를 사용할 수 있습니다.

관련 문제