Asp.net mvc 3 使用EditorTemplate显示null IEnumerable

Asp.net mvc 3 使用EditorTemplate显示null IEnumerable,asp.net-mvc-3,asp.net-mvc-4,mvc-editor-templates,Asp.net Mvc 3,Asp.net Mvc 4,Mvc Editor Templates,我有一个复杂的对象,它有一个IEnumerable属性,我想在视图中显示它 为此,我为该列表创建了一个EditorTemplate 因此,在我看来,我有以下代码: <div id="tabMed" class="tab-pane"> <fieldset> <div> @Html.EditorFor(m => m.MyList) </div> </fieldse

我有一个复杂的对象,它有一个IEnumerable属性,我想在视图中显示它

为此,我为该列表创建了一个EditorTemplate

因此,在我看来,我有以下代码:

<div id="tabMed" class="tab-pane">
    <fieldset>   
        <div>
            @Html.EditorFor(m => m.MyList)
        </div>
    </fieldset>
</div>

@EditorFor(m=>m.MyList)
m、 List是IEnumerable类型,编辑器模板中有一些字段用于显示对象

当列表中有一个或多个对象时,此选项可以正常工作;它将为该列表中的每个对象显示并重复该模板

现在的问题是:

假设我想要编辑包含该列表的对象,并且IEnumerable属性为null。编辑器模板根本不会出现,因此无法创建该列表中的第一个对象

如果列表为空,是否有任何方法可以显示空模板,而不必这样做

<div id="tabMed" class="tab-pane">
    <fieldset>   
        <div>
            @if (Model.MyList.Count() > 0)
            {
                @Html.EditorFor(m => m.MyList)
            }
            else
            {
                // empty object form template here...
            }
        </div>
    </fieldset>
</div>

@if(Model.MyList.Count()>0)
{
@EditorFor(m=>m.MyList)
}
其他的
{
//此处为空对象表单模板。。。
}
编辑:EditorTemplate如下所示:

@model Jazz.Models.MyList.MyObject

<div class="control-group">
    @Html.LabelFor(model => Model.Name, new { @class="control-label"})
    <div class="controls">
        @Html.TextBoxFor(m => m.Name, new { @class="collection-item", autocomplete = "off", maxlength = 64 })
    </div>
</div>
public class MyList
{
    public MyList()
    {
        this.list = new List<MyObject>();
    }

    public int id{ get; set; }

    public List<MyObject> list{ get; set; }

    public class MyObject
    {
        public MyObject(){}

        public string Name{ get; set; }

    }
}
@model Jazz.Models.MyList.MyObject
@LabelFor(model=>model.Name,新的{@class=“control label”})
@TextBoxFor(m=>m.Name,新的{@class=“collection item”,autocomplete=“off”,maxlength=64})
MyList是我要显示的列表

MyObject类在MyList中声明

因此,模型如下所示:

@model Jazz.Models.MyList.MyObject

<div class="control-group">
    @Html.LabelFor(model => Model.Name, new { @class="control-label"})
    <div class="controls">
        @Html.TextBoxFor(m => m.Name, new { @class="collection-item", autocomplete = "off", maxlength = 64 })
    </div>
</div>
public class MyList
{
    public MyList()
    {
        this.list = new List<MyObject>();
    }

    public int id{ get; set; }

    public List<MyObject> list{ get; set; }

    public class MyObject
    {
        public MyObject(){}

        public string Name{ get; set; }

    }
}
公共类MyList
{
公共MyList()
{
this.list=新列表();
}
公共int id{get;set;}
公共列表{get;set;}
公共类MyObject
{
公共MyObject(){}
公共字符串名称{get;set;}
}
}

我以一种通用的方式给出了这个示例,因此可以更简单地显示问题。

您不能在模型的构造函数中初始化一个空列表吗?即使列表存在但没有对象,它也不会显示模板。我看到的唯一方法是在列表中添加一个空对象。但我不知道这是否是一个非常优雅的解决方案。您的EditorTemplate看起来像什么?嗨,Rowan,我已经更新了将模板键入到单个对象的PostInstant,将其键入到
MyList
类,然后枚举模板内的列表?