默认情况下,MVC4使用System.Web.Mvc.WebViewPage
作为基类,用于暴露属性的所有页面,例如在Razor视图中的任何一点使用帮助器Html
和Ajax
。
我的所有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
现在甚至都不知道@Model
或public 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>
ReSharper在我的Index.cshtml中抱怨以下内容
Cannot resolve symbol 'Layout'
Cannot resolve symbol 'ViewModel'
在第4行和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
答案 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/