博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC几种传值方式
阅读量:4580 次
发布时间:2019-06-09

本文共 6342 字,大约阅读时间需要 21 分钟。

一,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 List
Courses { 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()        {            List
courses = _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 List
Courses { 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))

  

转载于:https://www.cnblogs.com/Aamir-Ye/p/4611954.html

你可能感兴趣的文章