2011-12-24 23 views
1

我試圖爲List<Package>創建Editortemplate。我完全限定的類型在我Editortemplate視圖,例如:Editortemplate的列表<ComplexType>沒有工作

@model List<JYP.Business.ViewModels.Package> 

當我嘗試我Editortemplate視圖中的參考模型,我得到一個空引用這使我相信,該模型是沒有得到相關正常。我必須在我的ViewModel中使用UIHint才能讓它使用Editortemplate。我的ViewModel包含一個List<Package> Packages這正是我想讓我的自定義Editortemplate拿起。我究竟做錯了什麼?

+2

無法您只需將它指定爲@model JYP.Business.ViewModels.Package因爲@ Html.EditorFor()將通過在模型中的軟件包列表會自動進行迭代,並調用您EditorTemplate爲他們每個人。 – 2011-12-25 00:34:29

回答

1

你可以依靠約定:

public class MyViewModel 
{ 
    public List<Package> Packages { get; set; } 
} 

,然後在你的主觀點:

@model MyViewModel 
@Html.EditorFor(x => x.Packages) 

,然後你可以定義將被自動呈現在軟件包中的每個元素的編輯模板收藏:

@model JYP.Business.ViewModels.Package 
... 

按照慣例,這個編輯器模板應該放置在我~/Views/SomeController/EditorTemplates/Package.cshtml~/Views/Shared/EditorTemplates/Package.cshtml。這些是ASP.NET MVC將按此順序查找的2個位置。

0

按照您的要求,我知道你不希望使用UIHint或者說要使用的模板的任何其他方式。

這可能會爲你工作。

public class PackageCollection : List<JYP.Business.ViewModels.Package> 
    { 
    } 

現在主要型號使用

public class ModelTest{ 
public PackageCollection Items { get; set;} 
public ModelTest(){ 
    Items = new PackageCollection(); 
} 
} 

現在創建EditorTemplate與名稱PackageCollection.cshtml或PackageCollection.ascx按您的視圖引擎。

另一種解決方案

現在,如果你不wan't使用UIHint和上述方案,那麼你必須在編輯器指定TEMPLATENAME對於

Html.EditorFor(model=>model.Items , "yourtemplatename") 

這工作而無需創建packagecollection類。

謝謝。