使用viewbag发送数据



我正在做一个项目。我需要从数据库中获取一些数据并发送到视图。我已经有了一份数据清单。我还想通过viewbag发送我的另一个数据。我从数据库中查询了我的相关数据。

ClassController.cs

public ActionResult ClassTeacherDetail(int id)
{
ViewBag.dgr = db.Teachers.Where(m => m.Id == id).FirstOrDefault();

var myList = (from t in db.Appointments
from d in t.WeekDays
where t.TeacherId == id
select new { DayName=d.Name, WHours=t.Hours }
).ToList();

// Get the languages which can be learned by the teacher based on teacher id
var query = from t in db.Teachers.Where(x => x.Id == id)
from l in t.Languages
select new
{
LangName = l.Name,
};
var list = new List<Language>();
foreach (var item in query)
{
list.Add(new Language()
{
Name = item.LangName
});
}
return View(list);
}

在此处输入图像描述

正如你所看到的,我从不同的表格中得到了工作时间和天数。顺便问一下,myList的类型是什么?如果我将其发送到视图,模型类型是什么?

如何传递myList?

myList是Anonymous object类型的List,这没有错,但很难跟踪。我们需要做的是为它创建一个类/模型,然后创建一个包含这两个变量的视图模型。

  1. 为myList匿名对象创建一个模型或视图模型,我使用了TeacherAppoint
// if the property/data type doesn't match with your Appointments model, please change accordingly
public class TeacherAppointment {
public string DayName {get;set;}
public string WHours {get;set;}
}
  1. 更新myList LINQ以将其存储到TeacherAppointment对象中。myList现在是List<TeacherAppointment>
var myList = (from t in db.Appointments
from d in t.WeekDays
where t.TeacherId == id
select new TeacherAppointment { DayName=d.Name, WHours=t.Hours }
).ToList();
  1. 创建一个包含2个模型的视图模型
public class TeacherDetailViewModel{
public List<TeacherAppointment> TeacherAppointments {get;set;}
public List<Language> Languages {get;set;}
}
  1. 在您看来,您应该使用
@model TeacherDetailViewModel
  1. 您的控制器代码应该是
public ActionResult ClassTeacherDetail(int id)
{
ViewBag.dgr = db.Teachers.Where(m => m.Id == id).FirstOrDefault();

var myList = (from t in db.Appointments
from d in t.WeekDays
where t.TeacherId == id
select new TeacherAppointment { DayName=d.Name, WHours=t.Hours }
).ToList();

// Get the languages which can be learned by the teacher based on teacher id
var query = from t in db.Teachers.Where(x => x.Id == id)
from l in t.Languages
select new
{
LangName = l.Name,
};
var list = new List<Language>();
foreach (var item in query)
{
list.Add(new Language()
{
Name = item.LangName
});
}
// instantiate view model
TeacherDetailViewModel tdvm = new TeacherDetailViewModel();
// assign myList and list to TeacherDetailViewModel
tdvm.TeacherAppointments = myList;
tdvm.Languages = list;
// Pass tdvm to the view
return View(tdvm);
}
  1. 在您的视图中,如果您想循环
@foreach(var a in Model.TeacherAppointments){
...
}
@foreach(var b in Model.Languages){
...
}

最新更新