【问题标题】:Sending data with viewbag使用 viewbag 发送数据
【发布时间】:2020-06-28 15:40:27
【问题描述】:

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

类控制器.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);
        }

enter image description here

如您所见,我从不同的表格中获取了工作时间和天数。顺便问一下,myList 的类型是什么?如果我将其发送给查看,模型类型将是什么?

如何传递 myList?

【问题讨论】:

  • 不要使用ViewBag,而是使用模型。您可以在视图模板代码中获得类型安全性。
  • 您将错误的列表分配给ViewBag。您将myList 分配给ViewBag 并在视图中尝试从teacherDayHours 获取dada
  • 但是我已经有模型了
  • 你会发布你的完整控制器代码吗?
  • @JerdineSabio 我发布了完整的控制器

标签: asp.net asp.net-mvc entity-framework linq model-view-controller


【解决方案1】:

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

  1. 为 myList 匿名对象制作模型或视图模型,我使用的是 TeacherAppointment;
// 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&lt;TeacherAppointment&gt;
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){
   ...
}

【讨论】:

  • 非常感谢。你帮了我很多。我克服了我的问题。
  • @AtakanTekoglu 不客气!也谢谢你。请接受这个作为完成的正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
相关资源
最近更新 更多