usando Html.EditorFor con un IEnumerable <T>

Tengo una clase personalizada:

public class Person
{
    public String Name { get; set; }
    public Int32 Age { get; set; }
    public List<String> FavoriteFoods { get; set; }

    public Person()
    {
        this.FavoriteFoods = new List<String>();
        this.FavoriteFoods.Add("Jambalya");
    }
}

Paso esta clase a mi vista fuertemente tipada:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcLearner.Models.Person>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create</h2>

    <% using (Html.BeginForm()) { %>
        <%= Html.LabelFor(person => person.Name) %><br />
        <%= Html.EditorFor(person => person.Name) %><br />
        <%= Html.LabelFor(person => person.Age) %><br />
        <%= Html.EditorFor(person => person.Age) %><br />
        <%= Html.LabelFor(person => person.FavoriteFoods[0]) %><br />
        <%= Html.EditorFor(person => person.FavoriteFoods[0]) %>
    <% } %>

</asp:Content>

Y cuando navego por la página, aparece el mensaje de error: las plantillas solo se pueden usar con expresiones de acceso a propiedades y campos. Después de un poco de googlear, me di cuenta de que esto sucede porque las funciones EditorFor y LabelFor solo pueden aceptar propiedades inmediatas del objeto Modelo, y FavoriteFoods [0] no es una propiedad inmediata. ¿Alguien tiene un trabajo en torno al cual el código funcione sin usar una cadena para especificar el nombre del control? ¿Es eso posible? De manera óptima, me gustaría usar una expresión del modelo para el elemento que necesita un editor, que determina por sí solo el nombre del control para la entrada.

Probando algunas cosas más, pude hacer que esto funcionara usando los siguientes cambios en la vista:

<% using (Html.BeginForm()) { %>
    <%= Html.LabelFor(person => person.Name) %><br />
    <%= Html.EditorFor(person => person.Name) %><br />
    <%= Html.LabelFor(person => person.Age) %><br />
    <%= Html.EditorFor(person => person.Age) %><br />
    <% foreach (String FavoriteFoods in Model.FavoriteFoods) { %>
        <%= Html.LabelFor(food => FavoriteFoods) %><br />
        <%= Html.EditorFor(food => FavoriteFoods)%><br />
    <% } %>
    <input type="submit" value="Submit" />
<% } %>

Sin embargo, es importante tener en cuenta que el lado derecho de la expresión en EditorFor y LabelFor debe ser el nombre exacto de la lista que está intentando rellenar y la lista debe ser de un tipo básico (es decir, String, Int32, etc.). Cuando intento usar tipos complejos, sin embargo, todavía falla. Intenté mostrar una lista de esta clase de persona con entradas para cada propiedad y las muestra todas al navegador, pero luego devuelve una Lista nula a mi acción posterior. ¿Cómo consigo que el índice aparezca en el nombre de las entradas para los elementos de una lista?

Esta fue una gran ayuda para averiguar qué estaba pasando.

Respuestas a la pregunta(1)

Su respuesta a la pregunta