2011-04-20 61 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;} 
} 
相關問題