创建一个强类型视图,它继承了具体的类

时间:2010-05-04 05:39:50

标签: c# asp.net-mvc

我有一个叫做BaseClass的类,它包含一些适用于整个网站的逻辑。

为了创建强类型视图,我们需要从System.Web.Mvc.ViewPage泛型类继承该页面。但在我们的例子中,我必须从中继承BaseClass System.Web.Mvc.ViewPage应用一些常用设置,但BaseClass应继承自System.Web.Mvc.ViewPage<>通用版本。但我不能从System.Web.Mvc.ViewPage<>继承BaseClass。因为它也将改变其他类。所以我又创建了一个类BaseClass<>从System.Web.Mvc.ViewPage继承它<>并在BaseClass<>中复制了BaseClass的整个代码。但BaseClass中的代码由其他团队控制,因此它会经常更改,因此我的BaseClass<>应该与BaseClass同步。请帮我消除代码重复或任何其他方法来制作强类型视图。

由于 Ashwani

3 个答案:

答案 0 :(得分:1)

...哎哟

我不确定您在BaseClass中拥有什么。但我认为最好的选择是创建一个BaseViewModel(可能你的BaseClass是BaseViewModel>然后为每个页面创建特定的ViewModel(继承自BaseViewModel)。

例如,您的ViewModel应如下所示:

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,简化从自定义类到ViewModel的映射过程。

干杯

答案 1 :(得分: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

答案 2 :(得分:0)