簡體   English   中英

C#4.0泛型和ASP.net MVC

[英]C# 4.0 Generics and ASP.net MVC

似乎在C#4.0中,差異說明符僅適用於接口類型。

假設我有ViewModel / EditModel類和簡單的模型層次結構。

class MyEditModel<T> where T : Base { ... }
class Derived1 : Base { ... }
class Derived2 : Base { ... }

我有一個局部視圖,該視圖接受任何類型的MyEditModel(只要它是從Base派生的),而另一個視圖僅接受Derived1的實例。 現在如何在同一頁面上同時渲染它們?

接受任何MyEditModel的局部視圖將在Derived1的編輯器和Derived2的編輯器之間共享。

您唯一可以執行的操作是,如果您的視圖接受Base的視圖模型。 從面向對象的角度來看,MyEditModel和Derived1將Base共享為通用基類-但它們不共享其他任何東西-沒有其他關系。 因此,如果您嘗試使用相同的名稱,則必須從Base派生。 大概Base的屬性是它們唯一的共同點。

編輯 :我誤解了原始問題。 基於問題的文字,我認為您正在傳遞Derived1,但是基於下面的注釋,您正在傳遞MyEditModel<Derived1> 這將滿足您的要求:

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

您不會從動態中獲得智能感知的好處-但是,您的確會為類型重新使用相同的視圖文件,並且不必為了使編譯器滿意而創建額外的視圖模型類,便會獲得好處。

暫無
暫無

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

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