[英]A single view with two models in asp.net MVC 4
我在模態中有一個名為movie.cs的類,如下所示。
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; }
}
}
現在我想在同一視圖中訪問電影和學生的數據。但是我也無法訪問任何一個的數據。
在控制器中我有
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 />
}
您需要的是ViewModel。 Viewmodel類包含要在案例中顯示的那些類:電影和學生。 它可以僅用於包裝所需的信息,也可以用作更復雜數據的包裝。
public class MovieStudentVM
{
public IEnumerable<Movie> Movies { get; set; }
public IEnumerable<Student> Students { get; set; }
}
現在,您的Index方法應該返回您的Viewmodel:
public ActionResult Index()
{
var vm = new MovieStudentVM();
vm.Movies = db.Movies;
vm.Students = db.Students;
return View(vm);
}
之后,建立您的View:
@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)
{
@* ... *@
}
更多信息:
這種東西的一個好習慣是使用所謂的“ 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
您可以使用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>
發生這種情況的原因是,您希望在視圖中看到MovieContext,並且正在傳遞Movie模型,因此請嘗試使viewmodel如下所示:-
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 />
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.