Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用viewbag发送数据_Asp.net_Asp.net Mvc_Entity Framework_Linq_Model View Controller - Fatal编程技术网

Asp.net 使用viewbag发送数据

Asp.net 使用viewbag发送数据,asp.net,asp.net-mvc,entity-framework,linq,model-view-controller,Asp.net,Asp.net Mvc,Entity Framework,Linq,Model View Controller,我正在做一个项目。我需要从数据库中获取一些数据并发送到视图。我已经有了一份数据清单。我还想通过viewbag发送我的另一个数据。我从数据库中查询了我的相关数据 ClassController.cs public ActionResult ClassTeacherDetail(int id) { ViewBag.dgr = db.Teachers.Where(m => m.Id == id).FirstOrDefault();

我正在做一个项目。我需要从数据库中获取一些数据并发送到视图。我已经有了一份数据清单。我还想通过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);
        }
public ActionResult类教师详细信息(int-id)
{
ViewBag.dgr=db.Teachers.Where(m=>m.Id==Id.FirstOrDefault();
var myList=(从t开始,以db.为单位)
工作日从d开始
其中t.TeacherId==id
选择新建{DayName=d.Name,WHours=t.Hours}
).ToList();
//根据教师id获取教师可以学习的语言
var query=来自t,在db.Teachers.Where中(x=>x.Id==Id)
来自t语言中的l
选择新的
{
LangName=l.名称,
};
var list=新列表();
foreach(查询中的var项)
{
list.Add(新语言()
{
Name=item.LangName
});
}
返回视图(列表);
}

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


如何传递myList?

myList是一个类型为
匿名对象的列表
,这没什么错,但很难跟踪。我们需要做的是为它创建一个类/模型,然后创建一个包含这两个变量的viewmodel

  • 为myList匿名对象制作模型或视图模型,我使用TeacherAppointment
  • 更新myList LINQ以将其存储到TeacherAppointment对象。我的列表现在是
    List
  • 创建将包含2个模型的视图模型
  • 您的控制器代码应为
    不要使用
    ViewBag
    而是使用模型。您在视图模板代码中获得了类型安全性。您将错误的列表分配给了
    ViewBag
    。您将
    myList
    分配给
    ViewBag
    并在视图中尝试从
    teacherDayHours
    获取dada,但视图中已经有一个模型,您是否发布完整的控制器代码?@JerdineSabio我发布了完整的控制器非常感谢。你帮了我很多。我克服了我的问题。@AtakanTekoglu不客气!谢谢。请接受此作为完成的正确答案。
    // 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;}
    }
    
    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();
    
    public class TeacherDetailViewModel{
       public List<TeacherAppointment> TeacherAppointments {get;set;}
       public List<Language> Languages {get;set;}
    }
    
    @model TeacherDetailViewModel
    
    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);
            }
    
    @foreach(var a in Model.TeacherAppointments){
       ...
    }
    
    @foreach(var b in Model.Languages){
       ...
    }