2011-04-20 28 views

回答

18

Razor不支持此类语法,对不起。

+7

无赖。我很乐意在未来看到它的支持,但我没有看到任何其他人抱怨,所以我怀疑它会获得任何形式的牵引力。感谢您的回答。 – egoodberry 2011-04-21 12:41:41

+3

我想要这个!所以这是抱怨或至少是另一个人的要求。 – 2011-06-28 16:17:56

+1

哇。说实话,这很令人震惊。 – fearofawhackplanet 2011-09-14 15:27:44

23

因为@model期待一个类型 - 不是一个类型声明 你可以使用:

@model DtoViewModel<IDto> 

,并要在为了使用泛型类型采取通用的协方差

6

假设的优势为了避免在ViewModel<T>每个视图代码复制,你可以这样来做:

创造的ViewModel<T>特有的部分景色到视图

ModelView.cshtml

@model ViewModel<specificType> 

@{Layout = "~/Views/Shared/Layout.cshtml";} 
<h2 class="sub-header">Specific type view</h2> 

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> 

由于是局部视图,因此不需要再次声明Model的类型。它将简单地使用您在父视图中定义的模型来呈现它。您的模型的属性IList<T> PageItems将保持与<specificType>的强类型。

。不要忘记真正使您的公用部分

ModelView.cshtml的局部视图:

@RenderPage("~/Views/Shared/Grid.cshtml") 
-1

这是不理想,但它的工作原理,并能得到这种模式相当有创造性。

@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;} 
} 
相关问题