Отправка данных с помощью viewbag - PullRequest
1 голос
/ 17 марта 2020

Я работаю над проектом. Мне нужно получить несколько данных из базы данных и отправить для просмотра. У меня уже есть список данных. И я также хочу отправить мои другие данные через 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?

1 Ответ

2 голосов
/ 17 марта 2020

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;}
}
Обновите 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();
Создание модели представления, которая будет содержать 2 модели.
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){
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...