ASP.Net MVC множественное наследование в представлении - PullRequest
4 голосов
/ 01 марта 2010

Я пытаюсь выяснить, возможно ли множественное наследование в представлении в ASP.Net MVC. Прямо сейчас я пытаюсь распечатать список записей из двух разных таблиц из моей модели в одном представлении. У меня есть следующая строка в верхней части моего представления:

Inherits="System.Web.Mvc.ViewPage<List<GEApproval.Models.CoursePrefix>>"

Но я также хочу включить таблицу Course следующим образом:

Inherits="System.Web.Mvc.ViewPage<List<GEApproval.Models.Course>>"

Я не уверен, как это можно сделать, любая помощь или предложения приветствуются.

UPDATE:

Спасибо всем за помощь, я продолжил и создал составной класс следующим образом:

    namespace GEApproval.Models
{
    public class Listings: GEApproval.Models.CoursePrefix, GEApproval.Models.ICourse
    {
        public List<CoursePrefix> CoursePrefixObjList { get; set; }
        public List<Course> CourseObjList { get; set; }
        private GEApprovalDataModel _db;

        //Constructor
        public Listings()
        {
            _db = new GEApprovalDataModel();
        }

        //Generate a list of all courses associated with the prefix and place in ViewData model
        public void listCourses(ViewDataDictionary viewData, int prefixID)
        {
            var test = _db.CoursePrefix.Include("Course").First(cp => cp.id == 1);
            //Show total courses for this prefix
            viewData.Model = test.Course.ToList();
            viewData["prefix"] = test.Prefix;
            viewData["courseCount"] = test.Course.Count;
            int courseCount = test.Course.Count();//Test
        }

    }
}

И, на мой взгляд, теперь у меня есть следующая строка:

Inherits="System.Web.Mvc.ViewPage<List<GEApproval.Models.Listings>>"

Я все еще немного сбит с толку, потому что я все еще не могу получить доступ к свойствам объекта Course при перечислении их в моем представлении, потому что я наследую только напрямую от CoursePrefix. Я не уверен, что мне не хватает. Нужно ли иметь конструктор для составного объекта? Нужны ли мне инструкции наследования и реализации для CoursePrefix и ICourse соответственно, если я уже, якобы, выставляю свойства каждого из них в классе-оболочке листингов ??

Ответы [ 5 ]

8 голосов
/ 01 марта 2010

Создайте класс ViewModel, который имеет свойства, которые предоставляют оба набора данных. Привязать к этому вместо этого.

4 голосов
/ 01 марта 2010

Ваша модель может содержать только один объект. Если у вас есть несколько объектов, необходимых для вашего вида, вам придется создать составной объект.

Это может быть так же просто, как раскрытие нескольких свойств, соответствующих типам объектов, необходимых в представлении.

public class ModelObj
{
   public List<CoursePrefix> CoursePrefixObjList {get; set;}
   public List<Course> CourseObjList {get; set;}
}

Тогда просто используйте ваш ModelObj в представлении

Inherits="System.Web.Mvc.ViewPage<ModelObj>"
2 голосов
/ 01 марта 2010

Это не наследование, это дженерики, очень разные.

Нет, это невозможно, вам нужно объединить их в класс-обертку, содержащий две ссылки, или просто добавить ссылку на CoursePrefix в классе Course, что кажется разумным, но я основываю это на очень очень ограниченном понимании вашего модель!

1 голос
/ 02 марта 2010

В .Net нет такого понятия, как множественное наследование. Как уже упоминалось в других ответах, используйте составной объект ViewModel для этой ситуации (это обычно считается гораздо лучшим выбором дизайна, даже в языках, которые его поддерживают ).

0 голосов
/ 01 марта 2010
  • Если оба они являются производными от общего типа, вы можете сделать так, чтобы ваш вид был того же типа. Затем вам может понадобиться проверить тип в нескольких местах и ​​вывести специфические для типа свойства после приведения, в то же время выводя все общие свойства в обычном режиме. Обратной стороной является то, что в этом случае вид может считаться слишком умным.
  • Если это действительно отдельные типы, вам следует создать два разных представления, что выглядит более объектно-ориентированным путем.
  • Вы можете создать комбинированный вид этих двух типов. Я был бы против, так как один из них всегда мог быть нулевым.

Реальный вопрос в том, почему вы пытаетесь распечатать две разные таблицы в одном представлении. Если обе эти таблицы всегда заполнены, то сделайте это и создайте составной DTO, в противном случае они кажутся отдельными представлениями / одним представлением общей базы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...