簡體   English   中英

ASP.Net MVC在View中的多重繼承

[英]ASP.Net MVC multiple inheritance in a View

我試圖弄清楚它是否可能在ASP.Net MVC的視圖中有多重繼承。 現在我正試圖在一個視圖中打印出我模型中兩個不同表格的條目列表。 我的視圖頂部有以下行:

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

但我也希望將課程包括如下:

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

我不確定如何實現這一點,任何幫助或建議都表示贊賞。

更新:

謝謝大家的幫助,我繼續創建了一個復合類,如下所示:

    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的繼承和實現語句?

創建一個ViewModel類,該類具有公開這兩組數據的屬性。 綁定到那個。

您的模型只能包含一個對象。 如果視圖需要多個對象,則必須創建復合對象。

這可以像暴露與視圖中所需的對象類型匹配的多個屬性一樣簡單。

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

然后在視圖中使用ModelObj

Inherits="System.Web.Mvc.ViewPage<ModelObj>"

這不是繼承,它是泛型,非常不同。

不,這是不可能的,你需要將它們組合成一個包含兩個引用的包裝類,或者只是在Course類中添加一個對CoursePrefix的引用似乎是合理的,但我基於對你的模型非常有限的理解!

在.Net中沒有多重繼承這樣的東西。 正如其他答案所提到的,在這種情況下使用復合ViewModel對象(這通常被認為是一種更好的設計選擇, 即使在支持它的語言中也是如此 )。

  • 如果它們都是從普通類型派生的,那么您的視圖可以是該類型。 然后,您可能需要在幾個位置檢查類型並在轉換后輸出類型特定的屬性,同時正常輸出所有常用屬性。 不利的一面是,在這種情況下,View可能被認為太聰明了。
  • 如果這些是真正獨立的類型,你應該創建兩個不同的視圖,似乎更面向對象的方式。
  • 您可以創建這兩種類型的復合視圖。 我反對它,因為其中一個可能永遠是空的。

真正的問題是為什么你試圖在同一個視圖中打印出兩個不同的表。 如果這兩個表總是被填充,那么去它並創建復合DTO,否則這些看起來像是單獨的視圖/一個共同基礎的視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM