一,Model
public class Course { public int Id { get; set; } public string Name { get; set; } } public class Teacher { public int Id { get; set; } public string Name { get; set; } public ListCourses { get; set; } } public class Student { public int Id { get; set; } public string Name { get; set; } public List Courses { get; set; } }
二,使用ViewData传递多个Model
HomeController public ActionResult Index() { ViewData["Courses"] = _repository.GetCourses(); ViewData["Students"] = _repository.GetStudents(); ViewData["Teachers"] = _repository.GetTeachers(); return View(); } Home/Index.cshtml@using MvcApplication1.Models@using System.Web.Helpers;@{ Layout = null;}ViewDataDemo
选择课程
老师课程表
学生上课表
三,使用ViewBag传递多个Model
HomeController public ActionResult ViewBagDemo() { ViewBag.Courses = _repository.GetCourses(); ViewBag.Students = _repository.GetStudents(); ViewBag.Teachers = _repository.GetTeachers(); return View(); } Home/ViewBagDemo.cshtml 下拉框遍历课程改成: @foreach (var course in ViewBag.Courses) getTeacherTable()方法中改成: var teachers = @Html.Raw(Json.Encode(ViewBag.Teachers)); getStudentTable()方法中改成: var students = @Html.Raw(Json.Encode(ViewBag.Students));@Html.Raw(Json.Encode(ViewData["Students"]))是把Model转换成json字符串,需要用到System.Web.Helpers,把此类库引用到项目,并且必须设置"复制到本地属性"为true,否则报错。
四,使用部分视图传递多个Model
HomeController public ActionResult PartialViewDemo() { Listcourses = _repository.GetCourses(); return View(courses); } public ActionResult StudentsToPVDemo(string courseName) { IEnumerable courses = _repository.GetCourses(); var selectedCourseId = (from c in courses where c.Name == courseName select c.Id).FirstOrDefault(); IEnumerable students = _repository.GetStudents(); var studentsInCourse = students.Where(s => s.Courses.Any(c => c.Id == selectedCourseId)).ToList(); return PartialView("StudentPV", studentsInCourse); } public ActionResult TeachersToPVDemo(string courseName) { IEnumerable courses = _repository.GetCourses(); var selectedCourseId = (from c in courses where c.Name == courseName select c.Id).FirstOrDefault(); IEnumerable teachers = _repository.GetTeachers(); var teachersForCourse = teachers.Where(t => t.Courses.Any(c => c.Id == selectedCourseId)).ToList(); return PartialView("TeacherPV", teachersForCourse); } Home/PartialViewDemo.cshmtl@model IEnumerable @{ Layout = null;} PatialViewDemo
选择课程
老师课程表
学生上课表
TeacherPV.cshtml与StudentPV.cshtml
@model IEnumerable
编号
名称
@foreach (var item in Model)
{
@item.Id
@item.Name
}
五, 使用TempData传递多个Model
HomeController public ActionResult TempDataDemo() { //第一次从数据库读取数据放到TempData中,以后的请求从TempData中获取数据 TempData["Courses"] = _repository.GetCourses(); //让TempData保存数据,直到下一次请求 TempData.Keep("Courses"); return View(); } public ActionResult TeachersTempData(string courseName) { var courses = TempData["Courses"] as IEnumerable; //由于TempData["Courses"]还要被下一次请求,继续TempData保存数据 TempData.Keep("Courses"); var selectedCourseId = (from c in courses where c.Name == courseName select c.Id).FirstOrDefault(); IEnumerable teachers = _repository.GetTeachers(); var teachersForCourse = teachers.Where(t => t.Courses.Any(c => c.Id == selectedCourseId)).ToList(); return PartialView("TeacherPV", teachersForCourse); } public ActionResult StudentsTempData(string courseName) { var courses = TempData["Courses"] as IEnumerable ; //由于TempData["Courses"]还要被下一次请求,继续TempData保存数据 TempData.Keep("Courses"); var selectedCourseId = (from c in courses where c.Name == courseName select c.Id).FirstOrDefault(); IEnumerable students = _repository.GetStudents(); var studentsForCourse = students.Where(s => s.Courses.Any(c => c.Id == selectedCourseId)).ToList(); return PartialView("StudentPV", studentsForCourse); }Home/TempDataDemo.cshtml下拉框遍历课程: @foreach (var course in Model) ajax请求老师课程表: @Url.Action("TeachersTempData","Home") ajax请求学生上课表: @Url.Action("StudentsTempData","Home")
六,使用ViewModel传递多个Model
View Model public class SchoolVm { public ListCourses { get; set; } public List Students { get; set; } public List Teachers { get; set; } } □ HomeController public ActionResult ViewModelDemoVM() { SchoolVm vm = new SchoolVm(); vm.Courses = _repository.GetCourses(); vm.Teachers = _repository.GetTeachers(); vm.Students = _repository.GetStudents(); return View(vm); } □ Home/ViewModelDemoVM.cshtml@model MvcApplication1.Models.SchoolVm下拉框遍历课程: @foreach (var course in Model.Courses) ajax请求老师课程表和学生上课表: @Html.Raw(Json.Encode(Model.Teachers)) @Html.Raw(Json.Encode(Model.Students))