1

我正在尝试为List<Package>. 我完全限定了我的 Editortemplate 视图中的类型,如下所示:

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

当我尝试在我的 Editortemplate 视图中引用模型时,我得到一个空引用,这让我相信模型没有正确关联。我必须UIHint在我的 ViewModel 中使用 a 才能让它完全使用 Editortemplate。我的 ViewModel 包含一个List<Package> Packages我试图让我的自定义编辑器模板拾取的内容。我究竟做错了什么?

4

2 回答 2

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.cshtmlor~/Views/Shared/EditorTemplates/Package.cshtml中。这些是 ASP.NET MVC 将按该顺序查找它的 2 个位置。

于 2011-12-26T08:31:16.163 回答
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 及以上解决方案,那么您必须在 Editor For 中指定 TemplateName

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

这无需创建 packagecollection 类即可工作。

谢谢。

于 2011-12-25T03:32:00.770 回答