模型绑定到嵌套列表

时间:2009-09-29 22:03:30

标签: asp.net-mvc

我希望接受一个嵌套列表作为我的Action的参数。 我使用Phil Haack's Post作为起点,它适用于单个级别列表,但是当参数更复杂时,模型绑定器会将空值传递给我的操作。 (我还没有在模型活页夹的引擎下冒险,这个例子我需要吗?)

动作:

[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)
    } 
}

感谢您的建议。

干杯。

默里。

1 个答案:

答案 0 :(得分:2)

在RTM中你可以放弃.Index隐藏,你的数组索引必须是零索引的整数

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