2010-05-04 81 views
1

我有一個名爲BaseClass的類,它包含適用於整個網站的一些邏輯。創建一個強類型的視圖,它繼承了一個具體的類

爲了創建一個強類型視圖,我們需要從System.Web.Mvc.ViewPage泛型類繼承頁面。但在我們的情況下,我必須從 System.Web.Mvc.ViewPage繼承BaseClass以應用一些常用設置,但BaseClass應該從System.Web.Mvc.ViewPage繼承>通用版本。但是我不能從System.Web.Mvc.ViewPage繼承BaseClass>,因爲它也會改變其他類。因此,我創建了一個類BaseClass類,它從System.Web.Mvc.ViewPage <繼承它,並將BaseClass的整個代碼複製到BaseClass <>中。但BaseClass中的代碼由其他團隊控制,所以它會經常更改,因此我的BaseClass應該與BaseClass同步。請幫助我消除代碼重複或任何其他方法來製作強類型的視圖。

感謝 Ashwani

+0

沒有冒犯,但聽起來很糟糕。有沒有可能改變這個設置?這個'BaseClass'中的什麼邏輯?我有一種感覺,它會更好地包含在其他地方的邏輯... – Charlino 2010-05-04 06:19:23

+0

:(,BaseClass包含適用於整個網站的主題等相關邏輯 – 2010-05-04 06:23:10

+0

他們可以放入一個'BaseController'嗎?他們可以被放入'HtmlHelper'的擴展方法?你可以編輯你的問題,包括一些這樣的邏輯,讓人們有更好的主意嗎?:-) – Charlino 2010-05-04 06:39:09

回答

1

好吧......好像你不能更改。使用本BaseClass對你的看法。

如何複製ViewPage<TModel>的邏輯?看看在asp.net mvc源代碼中的ViewPage`1.cs file,然後複製它。這將是最簡單的方法...

E.g.

public class BaseClass : ViewPage 
{ 
    //Custom logic for africa here 
} 

public class BaseClass<TModel> : BaseClass 
{ 
    //Copy and paste all the code from ViewPage`1.cs 
    //It's not much - about 50 lines. 
} 

HTHS,
查爾斯

聚苯乙烯。鏈接到源代碼是爲asp.net mvc 2

+0

謝謝Charlino,我會試試。 – 2010-05-05 02:17:05

+0

謝謝Charlino,我工作過。 – 2010-05-05 03:20:08

1

哎喲......

我不知道你在BaseClass的是一樣的東西。但我認爲最好的辦法是創建一個BaseViewModel(也許你BaseClass的是你BaseViewModel>,然後爲每個頁面創建特定的ViewModels(從BaseViewModel繼承)

例如您的ViewModels應該是這個樣子:

public abstract class BaseViewModel 
{ 
    public string SiteTitle {get;set;} 
    public int SomeProperty{get;set;} 
} 

public class UserViewModel: BaseViewModel 
{ 
    public string UserName{get;set;} 
    public string Email{get;set;} 
} 

,你應該創建強類型的觀點是這樣的:

System.Web.Mvc.ViewPage<UserViewModel> 

你可以看看AutoMapper從您的自定義類simplyfy映射過程中的ViewModels

乾杯

+0

感謝Rrejc,在我的應用程序中,我有BasePage,它繼承了System.Web.Mvc.ViewPage,以便應用一些UI設置(如主題等)。但爲了工作的視圖具有相同的UI,我需要繼承它從BasePage <>通用版本,它應該從ViewPage <>繼承。 – 2010-05-04 06:17:56

0
public abstract class MyBaseView<T> : ViewPage<T> 
{ 
//common logic here 
} 

public class UserView: MyBaseView<MyUserInfo> 
{}