2010-05-04 35 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> 
{} 
相关问题