ego*_*rry 49 generics razor asp.net-mvc-3
是否可以在ASP.NET MVC 3(w/Razor)中使用通用模型?以下失败,出现语法错误:
@model DtoViewModel<T> where T : IDto
Run Code Online (Sandbox Code Playgroud)
Jac*_*ack 27
鉴于@model期望一个类型 - 而不是类型声明,你可以使用:
@model DtoViewModel<IDto>
Run Code Online (Sandbox Code Playgroud)
并利用通用协方差
mar*_*ind 22
Razor不支持这种语法,抱歉.
假设,您希望使用泛型类型以避免在每个视图中的代码重复,ViewModel<T>您可以这样做:
1.为视图ViewModel<T>特有的部分创建视图
ModelView.cshtml:
@model ViewModel<specificType>
@{Layout = "~/Views/Shared/Layout.cshtml";}
<h2 class="sub-header">Specific type view</h2>
Run Code Online (Sandbox Code Playgroud)
2.为公共部分创建一个视图,应该在每个视图中呈现<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>
Run Code Online (Sandbox Code Playgroud)
由于它是局部视图,因此您无需Model再次声明类型.它将简单地使用您在父视图中定义的模型来呈现它.IList<T> PageItems您的模型的属性将保持强类型<specificType>.
3.不要忘记实际渲染公共部分的局部视图
ModelView.cshtml:
@RenderPage("~/Views/Shared/Grid.cshtml")
Run Code Online (Sandbox Code Playgroud)