2014-09-23 3 views
0

다음과 같은 모달에 movie.cs라는 클래스가 있습니다.asp.net MVC 4에서 두 모델을 사용한 단일 뷰 MVC 4

namespace CodFirst.Models 
{ 
    public class Movie 
    { 
     public int MovieId { get; set; } 
     public string name { get; set; } 

     public string genre { get; set; } 
    } 

    public class Student 
    { 

     public int StudentId { get; set; } 
     public string fname { get; set; } 
     public string lname { get; set; } 
    } 

} 

그리고 내가 같이 moviecontext라는 같은 모달의 문맥 클래스가 있습니다

namespace CodFirst.Models 
{ 
    public class MovieContext:DbContext 
    { 
     public DbSet<Movie> Movies { get; set; } 
     public DbSet<Student> Students { get; set; } 
    } 
} 

지금 내가 같은 view.But 모두 영화와 학생의 데이터에 액세스 할을 내가 할 수 없습니다입니다 어느 하나의 데이터에 액세스 할 수도 있습니다. 컨트롤러의

내가

MovieContext db = new MovieContext(); 

    public ActionResult Index() 
    { 
     //db.Movies.ToList(); 
     var myvar = db.Movies; 

     return View(myvar); 
    } 

을 마지막으로보기는 다음과 같다 :

@model CodFirst.Models.MovieContext 

@{ 
    ViewBag.Title = "Index"; 
} 

@foreach(var item in Model.Movies) 
{ 
    @Html.DisplayName("movie: ") @item.name; @Html.DisplayName(" type: ") @item.genre; <br /> 

} 
+0

가 어떻게 둘 다의 액세스를 시도하고있는 오류와 함께 어디 실패 하는가? "ViewModels"검색을 시도 했습니까? 또한보기의 모델은 MovieContext가 아닌 Movie 유형이어야합니다. – Marco

+0

처음에는 onyone..With @ modal.projectname.Modals.movie에 액세스하려고합니다. 동영상에서는 데이터에만 액세스 할 수 있지만 학생에게는 액세스 할 수 없습니다. – suman

답변

3

필요한 것은 ViewModel입니다. Viewmodel 클래스는 사례에 표시하려는 클래스 인 영화 및 학생으로 구성됩니다. 필요한 정보를 랩핑하거나보다 복잡한 데이터를 래퍼하는 용도로만 사용할 수 있습니다.

@model CodFirst.Models.MovieStudentVM 

@foreach(var item in Model.Movies) 
{ 
    @Html.DisplayName("movie: ") @item.name; @Html.DisplayName(" type: ") @item.genre; <br /> 
} 

@foreach(var item in Model.Students) 
{ 
    @* ... *@ 
} 

추가 정보 :

  • What is ViewModel in MVC?
  • 당신의보기를 구축 이후

    public ActionResult Index() 
    { 
        var vm = new MovieStudentVM(); 
        vm.Movies = db.Movies; 
        vm.Students = db.Students; 
    
        return View(vm); 
    } 
    

    :

    public class MovieStudentVM 
    { 
        public IEnumerable<Movie> Movies { get; set; } 
        public IEnumerable<Student> Students { get; set; } 
    } 
    

    검지 방법은 지금의 ViewModel을 반환해야

+0

db가 사용했습니다. moviecontext class right.Please에서 사용했습니다. viewmodal과 context class의 차이점을 알려주시겠습니까? – suman

+0

dbcontet 클래스는 데이터베이스에 상주하는 데이터와의 상호 작용을 담당합니다. ViewModel은 데이터가 어떻게 보이는지에 대한 청사진 일뿐입니다. 참조 : http://msdn.microsoft.com/en-us/data/jj729737.aspx – Marco

0

의 일어나는 당신은 MovieContext보기에 기대하고 그리고 당신은 영화의 모델이 너무 뷰 모델을 시도 통과하기 때문에 아래 코드와 같습니다 : -

public class ViewModel 
{ 
    public IEnumerable<Movie> Movies { get; set; } 
    public IEnumerable<Student> Students { get; set; } 
} 

및보기 : -

@model CodFirst.Models.ViewModel 

@{ 
    ViewBag.Title = "Index"; 
} 

@foreach(var item in Model.Movies) 
{ 
    @Html.DisplayName("movie: ") @item.name; @Html.DisplayName(" type: ") @item.genre; <br /> 

} 
+0

차이점을 볼 수 없다 ... 그 클래스 이름은 moviecontext이고 클래스 이름은 Viewmodal이다. 차이점은 무엇인가? – suman

+0

'DbSet <>'으로 구성된 ViewModel을 빌드 하시겠습니까? – Marco

+0

실수로 @Serv – Neel

2

'ViewModels'라고하는 것을 사용하는 것이 좋습니다.

MyViewModel :

public class MyViewModel { 
    public IEnumerable<Movie> Movies { get; set; } 
    public IEnumerable<Student> Students { get; set; } 
} 

컨트롤러 :

public ActionResult Index() 
{ 
    var model = new MyViewModel { 
     Movies = db.Movies.ToList(), 
     Students = db.Students.ToList() 
    } 
    return View(model); 
} 

다음보기 :

@model CodFirst.Models.MyViewModel 

// your view stuff 
1

당신이보기에 액세스 할 데이터를 저장하는 새 모델을 정의 View Model로 갈 수 있지만 여기에서 Tuple을 실제로 사용하려면

이 필요합니다.
public class ToupleController : Controller 
{ 
    public ActionResult Index() 
    { 
     var first = new FirstModel(); 
     var second = new SecondModel(); 

     return View(Tuple.Create(first,second)); 
    } 
} 

하고보기

@model Tuple<FirstModel, SecondModel> 
    <div> 
     @Html.TextBoxFor(x => x.Item1.Prop1) 
     @Html.TextBoxFor(x => x.Item1.Prop2) 
    </div> 
    // to access your second model 
    <div> 
     @Html.TextBoxFor(x => x.Item2.Prop1) 
     @Html.TextBoxFor(x => x.Item2.Prop2) 
    </div>