Nested BeginCollectionItem

Estoy usando el enfoque BeginCollectionItem de Steve Sanderson para agregar contenido dinámico. Todo funciona bien cuando lo hago en el primer nivel. Sin embargo, cuando intenta implementar una colección anidada que significa un BeginCollectionItem en otro BeginCollectionItem, no parece funcionar.

Mis modelos son los siguientes:

public class Order
{

        [Key]
        [HiddenInput]
        public int id { get; set; }

        [Display(Name = "Order number")]
        public string number { get; set; }

        ...

        [Display(Name = "Payment method")]
        public List<PaymentMethod> payment_methods { get; set; }

        ...
}

public class PaymentMethod
{
        public MethodOfPayment method { get; set; }
        public CC cc { get; set; }
        public CASH cash { get; set; }
        public TT tt { get; set; }
}

public class TT
{
        [Key]
        public int id { get; set; }

        [Required(ErrorMessage = "{0} is required.")]
        [Display(Name = "Total amount")]
        public double? total_value { get; set; }

        ...

        [Display(Name = "Transfers")]
        public List<Transfer> transfers { get; set; }
}

public class Transfer
{
        [Key]
        public int id { get; set; }

        [Display(Name = "Payment")]
        public int payment_id { get; set; }

        [Required(ErrorMessage = "{0} is required.")]
        [Display(Name = "SWIFT")]
        public string swift { get; set; }

        [Required(ErrorMessage = "{0} is required.")]
        [Display(Name = "Amount transferred")]
        public double? transfer_amount { get; set; }

        [Required(ErrorMessage = "{0} is required.")]
        [Display(Name = "Date transferred")]
        public DateTime transfer_date { get; set; }

        ...
}

Ahora lo que tengo es un Pedido que podría tener varios métodos de pago, y si uno de los métodos de pago es un TT (transferencia télex) podría tener varias transferencias involucradas. La implementación de varios métodos de pago en un Pedido como una colección funciona, pero cuando trato de implementar varias transferencias dentro de un TT, ninguna de estas transferencias pasa al controlador.

Así es como se ve mi vista:

@model prj.Models.Model.Order

@using (Html.BeginForm("Create")){
@Html.ValidationSummary(true, "Creation was unsuccessful. Please correct the errors and try again.")

...

@Html.TextBoxFor(m => m.number, new { id = "txtnumber" })

...


<div id="editorPaymentRows">
    @foreach (var payment in Model.payment_methods)
    {
        @Html.Partial("_NewPayment", payment)
    }
</div>

}

En el _NewPayment parcial:

@using prj.Helpers 
@model prj.Models.Model.PaymentMethod

<div class="editPaymentRow">

@using (Html.BeginCollectionItem("payment_methods"))
{
...

<div class="editor-label">
    @Html.LabelFor(m => m.tt.total_value)<req>*</req>      
</div>

<div class="editor-field">
    @Html.TextBoxFor(m => m.tt.total_value)
</div>

...


<div id="editorTransferRows">
   @if (Model.tt != null)
{
    foreach (var transfer in Model.tt.transfers)
    {
         @Html.Partial("_NewTransfer", transfer)
    }
}
...
</div>



}

</div>

y finalmente en el parcial _NewTransfer:

@using prj.Helpers 
@model prj.Models.Model.Transfer
...

<div class="editTransferRow">
//using (Html.BeginCollectionItem("transfers"))
@using (Html.BeginCollectionItem("tt.transfers"))
{
...

<div class="editor-label">
    @Html.LabelFor(m => m.swift)<req>*</req>      
</div>

<div class="editor-field">
    @Html.TextBoxFor(m => m.swift, new { @class = "t_swift" })
</div>

...

<div class="editor-label">
    @Html.LabelFor(m => m.transfer_amount)<req>*</req>      
</div>

<div class="editor-field">
    @Html.TextBoxFor(m => m.transfer_amount, new { @class = "t_transfer_amount" })
</div>

...
}

</div>

Así que todo funciona, excepto en el controlador, la Lista de transferencias que está en la propiedad TT de PaymentMethods siempre es nula. No se pasa al controlador correctamente. ¿Se me escapa algo

No funciona BeginCollectionItem anidado? ¿Hay un paso adicional que debo hacer? Por favor, arroja algo de luz. Gracia

Lo descubrí usando el método de Joe Stevens que se muestra en el siguiente enlace:

http: //www.joe-stevens.com/2011/06/06/editing-and-binding-nested-lists-with-asp-net-mvc-2

Salu

Respuestas a la pregunta(2)

Su respuesta a la pregunta