使用EditorTemplate显示null IEnumerable

时间:2013-12-05 22:38:58

标签: 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>
    </fieldset>
</div>

m.List是一个IEnumerable类型,编辑器模板在一些字段内部用于显示对象。

当列表包含一个或多个对象时,这可以正常工作;它将显示并重复该列表中每个对象的模板。

现在出现问题:

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

如果列表为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>

编辑: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>

MyList是我想要显示的列表

MyObject类在MyList中声明

所以,模型会是这样的:

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; }

    }
}

我以通用的方式放置示例,因此显示问题更为简单。

0 个答案:

没有答案