在ASP.NET MVC Razor中使用通用模型
是否有可能在ASP.NET MVC 3(w / Razor)中使用通用模型? 以下语法错误会失败:
@model DtoViewModel<T> where T : IDto
这种语法不被Razor支持,对不起。
因为@model正在期待一个types – 而不是一个types声明,你可以使用:
@model DtoViewModel<IDto>
并利用通用协方差
假设您想使用genericstypes来避免ViewModel<T>
每个视图中的代码重复,您可以这样做:
1.为视图独有的ViewModel<T>
部分创build一个视图
ModelView.cshtml :
@model ViewModel<specificType> @{Layout = "~/Views/Shared/Layout.cshtml";} <h2 class="sub-header">Specific type view</h2>
2.为公共部分创build一个视图,这些视图应在每个<T>
视图中呈现
Grid.cshtml :
@{ var webGrid = new WebGrid(Model.PageItems); } <div class="row" style="overflow: auto"> @webGrid.GetHtml("table-striped", mode: WebGridPagerModes.All, firstText: "First", lastText: "Last") </div>
由于是局部视图,因此不需要再次声明Model
的types。 它将简单地使用您在父视图中定义的模型来渲染它。 您的模型的属性IList<T> PageItems
将保持与<specificType>
强types。
3 。 不要忘记实际渲染公共部分的局部视图
ModelView.cshtml :
@RenderPage("~/Views/Shared/Grid.cshtml")
这是不理想的,但它的工作原理,可以用这种模式非常有创意。
@model YourNameSpace.MyModel public MyModel { public MyGenericType<string> ModelAStuff {get;set;} public MyGenericType<int> ModelBStuff {get;set;} public MyGenericType<DateTime> ModelCStuff {get;set;} } public class MyGenericType<T> { //use T how ever you like public T Color {get;set;} public T Year {get;set;} }
- 使用自定义VirtualPathProvider加载embedded的资源部分视图
- 淘汰赛+ mvc 3 +validation
- 为什么Visual Studio代码格式化不能正确使用Razor标记?
- IIS上的ASP.NET MVC3和Windows身份validation会一直redirect到/ Account / Login
- 使用Razor / MVC3将AssemblyVersion变成网页的问题
- 为我的MVC应用程序创build一个服务层?
- 如何渲染一个Razor视图到ASP.NET MVC 3中的string?
- 活动菜单项 – asp.net mvc3母版页
- IE提示打开或保存服务器的json结果