自定义WebViewPage以及其他类型参数

时间:2015-09-02 15:08:26

标签: c# asp.net generics inheritance razor

默认情况下,MVC4使用System.Web.Mvc.WebViewPage作为基类,用于暴露属性的所有页面,例如在Razor视图中的任何一点使用帮助器HtmlAjax

我的所有Model都继承自泛型类型,例如

MyModel : BaseModel<SomeComplexType>

是否有机会像

一样工作
MyViewPage<TCustom> : WebViewPage<TCustom> where TCustom: BaseModel<???>

公开属性

??? MyGenericProperty { get { return Model.CustomProperty;} }

然后可以像@MyGenericProperty.CustomValue一样View访问@Html,与MyViewPage<TModel, TCustom> : WebViewPage<TModel>相同?

View添加第二个参数似乎不起作用,每个@Html现在甚至都不知道@Modelpublic class FrameworkWebViewPage : WebViewPage { public override void Execute() { } }

也许通过反思,注射或其他魔术?

修改1

FrameworkWebViewPage.cshtml

public class FrameworkWebViewPage<TModel, TViewModel> : WebViewPage<TModel> where TModel : BaseResponse<TViewModel> where TViewModel : BaseViewModel
{
    protected TViewModel ViewModel { get { return Model.ViewModel; } }

    public override void Execute()
    {
    }
}

并且它是普通朋友(具有两个参数的朋友)

Incorrect number of type parameters. Candidates are: GenericViewModel.Framework.Pages.FrameworkWebViewPage GenericViewModel.Framework.Pages.FrameworkWebViewPage<TModel,TViewModel>

Screenshot Index.cshtml

ReSharper在我的Index.cshtml中抱怨以下内容

    第1行
  • Cannot resolve symbol 'Layout'
  • Cannot resolve symbol 'ViewModel'在第4行和
  • 第9行
  • Compiler Error Message: CS0308: The non-generic type 'GenericViewModel.Framework.Pages.FrameworkWebViewPage' cannot be used with type arguments

另一方面,它构建没有任何错误。 在运行时它会抛出

public class HomeIndexGetResponse : BaseResponse<HomeIndexGetViewModel>
{
}

以防万一,这是视图模型的实现:

SELECT [tblOpisy_Awarii].[ID], [tblOpisy_Awarii].[Opis_Awarii] FROM tblOpisy_Awarii WHERE [tblOpisy_Awarii].[UID] LIKE """ & Me!txtUIDMaszyny  & """; 

结束编辑1

1 个答案:

答案 0 :(得分:0)

只要您的网络视图继承自WebViewPage,我就不会发现任何不起作用的理由。

  

向MyViewPage添加第二个参数:WebViewPage似乎不起作用,因为现在每个View都不知道@Html或@Model。

@MyGeneicProperty在这种情况下有效吗?你看到任何编译错误吗?您可以尝试将.csproj文件中的<MvcBuildViews>设置为true,看看是否出现编译错误。

http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx/