我正在尝试为List<Package>
创建一个Editortemplate。我完全符合我的Editortemplate视图中的类型:
@model List<JYP.Business.ViewModels.Package>
当我尝试在Editortemplate视图中引用Model时,我得到一个空引用,这使我相信模型没有正确关联。我必须在我的ViewModel中使用UIHint
才能让它使用Editortemplate。我的ViewModel包含List<Package> Packages
,这就是我想要自定义Editortemplate的选项。我做错了什么?
答案 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类的情况下工作。
感谢。