列表的<editortemplate <complextype> not working </complextype>

时间:2011-12-24 20:46:10

标签: c# asp.net asp.net-mvc asp.net-mvc-3 mvc-editor-templates

我正在尝试为List<Package>创建一个Editortemplate。我完全符合我的Editortemplate视图中的类型:

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

当我尝试在Editortemplate视图中引用Model时,我得到一个空引用,这使我相信模型没有正确关联。我必须在我的ViewModel中使用UIHint才能让它使用Editortemplate。我的ViewModel包含List<Package> Packages,这就是我想要自定义Editortemplate的选项。我做错了什么?

2 个答案:

答案 0 :(得分:1)

你可以依赖惯例:

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

然后在主视图中:

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

然后你可以定义一个编辑器模板,它将自动为Packages集合的每个元素呈现:

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

按照惯例,此编辑器模板应放在~/Views/SomeController/EditorTemplates/Package.cshtml~/Views/Shared/EditorTemplates/Package.cshtml中。这些是ASP.NET MVC将按顺序查找的两个位置。

答案 1 :(得分:0)

根据您的要求,我了解您不希望使用UIHint或任何其他方式来说明要使用哪个模板。

这可能适合你。

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

现在在主模型中使用

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

现在根据您的ViewEngine创建名称为PackageCollection.cshtml或PackageCollection.ascx的EditorTemplate。

另一种解决方案

现在,如果您不想使用UIHint及以上解决方案,那么您必须在编辑器中指定TemplateName

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

这可以在不创建packagecollection类的情况下工作。

感谢。