IEnumerable propiedad del modelo en una plantilla de editor ASP.NET MVC 3

Tengo un modelo que tiene una propiedad IEnumerable (pseudocódigo de advertencia a seguir)

public class PersonModel {
    public string Name { get; set; }
    public IEnumerable<AddressModel> Addresses { get; set; }
}

public class AddressModel {
    public string Name { get; set; }
}

Quiero mostrar los subobjetos de Dirección en la misma vista

Person.cshtml

@model PersonModel

<form>
    <h2>Person</h2>

    @Html.EditorFor(m=>m.Name)

    <ul>@Html.EditorFor(m=>m.Addresses)</ul>

</form>

EditorTemplate / AddressModel

@model AddressModel

<li>@Html.TextboxFor(m=>m.Name)</li>

Marvellous, todo funciona bien

Pero, siendo un git, ahora quiero comenzar a usar diseños de plantilla para envolver todas mis propiedades en una forma de tipo estándar y esas cosas

Así que creo un string.cshtml y un list.cshtml para hacer esto, con un _Control.cshtml para el diseño

EditorTemplates / _Control.cshtml

<div>
    @Html.Label(string.Empty)
    <div class="input">
        @RenderBody()                    

        @Html.ValidationMessage(string.Empty)
    </div>
</div>

EditorTemplates / string.cshtml

@model string
@{    
    Layout = "_Control.cshtml";
}
@Html.TextBox(string.Empty, Model)

(hasta ahora yay! pero espera .. oh no ..)

Aquí está el problema

<ul>@Html.EditorFor(m=>m.Addresses)</ul>

desde la vista principal (ver arriba) se convierte en

@Html.EditorFor(m=>m.Addresses, "List")

EditorTemplates / list.cshtml

@model IEnumerable<object>
@{    
    Layout = "_Control.cshtml";
}
<ul>
    @foreach(var item in Model){
        @Html.EditorFor(m => item)
    }
</ul>

Esto representa la identificación y los nombres incorrectamente, algo como Addresses_item_Name, que no contiene la identificación, por lo que agrega la identificación con un bucle for

@for (var i = 0; i < Model.Count();i++ ) {
    @Html.EditorFor(m => Model.ElementAt(i))
}

Esto explota ya que el asistente de expresión MVC no permite nada más que matrices, pero las direcciones deben ser IEnumerable <> porque EF4.1 no admite .ToArray dentro de una subconsulta, es decir.

var model = (from p in DataContext.People
             where p.Id = 1
             select new PersonModel {
                 Name = p.Name,
                 Addresses = (from a in p.Addresses
                              select new AddressModel {
                                  Name = a.Name 
                              }).ToArray() // **NOT SUPPORTED**
             }).FirstOrDefault();

¿Alguien se ha enfrentado a esto? ¿Hay una forma estándar de hacerlo?

Esto funciona, pero ¿es correcto?

EditorTemplates / list.cshtml

@model IEnumerable<object>
@{    
    Layout = "_Control.cshtml";
    var prefix = ViewData.TemplateInfo.HtmlFieldPrefix;
}
<ul>
    @for (var i = 0; i < Model.Count();i++ ) {
        var item = Model.ElementAt(i);
        ViewData.TemplateInfo.HtmlFieldPrefix = string.Format("{0}[{1}]",prefix, i);
        @Html.EditorFor(m => item, null, string.Empty)
    }
</ul>

La estructura deseada es

<form>
    <control>
       Person Name Control Elements
    <control>

    <control>
       Address List Control Elements
    <control>
</form>

Respuestas a la pregunta(1)

Su respuesta a la pregunta