2009-09-29 2 views
2

У меня есть вложенный список, который я хочу принять в качестве параметра для своего действия. Я использовал Phil Haack's Post в качестве отправной точки, и он хорошо работает с одним списком уровней, но когда параметр более сложный, связующее свойство модели передает мне значение null. (Я не рискнула под капотом модели вяжущего еще, мне нужно для этого примера?)Привязка модели к вложенному списку

Действие:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Payment(..., List<AddonParticipants> addonParticipants) 
{...} 

Модель:

// this participant information will be added to the basket 
// onto the activity which has the matching Guid. 
public class AddonParticipants 
{ 
    public string Guid { get; set; } 
    public List<ParticipantDetails> Participants { get; set; } 
} 
public class ParticipantDetails 
{ 
    [Required(ErrorMessage = "Please enter participant's first name")] 
    public string FirstName { get; set; } 

    [Required(ErrorMessage = "Please enter participant's last name")] 
    public string LastName { get; set; } 
} 

Просмотр псевдокод:

foreach (...) 
{ 
    Html.Hidden("addonParticipants.Index", item.Addon.Guid) 
    Html.Hidden("addonParticipants["+item.Addon.Guid+"].Guid", item.Addon.Guid) 
    for (int i = 0; i < item.Addon.SubQuantity; i++) 
    { 
     Html.Hidden("addonParticipants[" + item.Addon.Guid + "].Participants.Index", i) 
     Html.TextBox("addonParticipants[" + item.Addon.Guid + "].Participants[" + i + "].FirstName", item.Addon.Participants[i].FirstName) 
     Html.TextBox("addonParticipants[" + item.Addon.Guid + "].Participants[" + i + "].LastName", item.Addon.Participants[i].LastName) 
    } 
} 

Предложения с благодарностью оценили.

Cheers.

Murray.

ответ

2

В RTM вы ДЭТА в канавах .index Hidden и ваши индексы массива должен быть нулевым индексированным Интсом

Т.е.

for(int j = 0; j < ...) 
{ 
     var item = items[j]; // or what ever 
     Html.Hidden("addonParticipants["+j+"].Guid", item.Addon.Guid) 
     for (int i = 0; i < item.Addon.SubQuantity; i++) 
     { 
       Html.TextBox("addonParticipants[" + j + "].Participants[" + i + "].FirstName", item.Addon.Participants[i].FirstName) 
       Html.TextBox("addonParticipants[" + j + "].Participants[" + i + "].LastName", item.Addon.Participants[i].LastName) 
     } 
} 
+0

безупречный, спасибо. – Myster

Смежные вопросы