如何在ASP MVC中绑定ViewModel列表?

时间:2011-03-30 05:18:11

标签: asp.net-mvc

有谁知道如何获取下面的MODELVIEW模式的POST值。我可以将MenuItem显示为Checkboxes和Radio按钮, 但是当用户提交表单即POST时,ModelViewTest为null。我期待用户选择的MenuItem列表。

public class ModelViewTest
{
    public IEnumerable<MenuItem> MenuItemList { get; set; } //Will be displayed as listboxes and checkboxes
    public Restaurant restaurant {get;set;}
}

行动:

public ActionResult Edit()
{
     //some code here
     }
     return View(new ModelViewTest());
}

[HttpPost]
public ActionResult Edit(ModelViewTest model)
{
    //I'm not getting List of MenuItems

    return View();
}

MenuItem类:

public class MenuItem
{
    public string MenuItemCode{get;set;}
    public string MenuItemDescription{get;set;}
    public string UIType {get;set;} //This determines whether it's radio or checkbox
    public string UIGroupType {get;set;} //Determines the Group for radio/checkbox.
}

public class Restaurant
{
    public string restaurantName{get;set;}
    public MenuItem MenuItem{get;set;}
}

更新

请参阅下面的观看代码段:

<table>                                
    @foreach (var menu in Model.MenuList)
    {
        if (menu.UIType == "Radio")
        {
            <tr>
                <td align="left">
                    <input id="MenuCheckboxRadio" name="@Menus.UIGroup" value="@Menu.MenuItemCode"  type="radio" />
                    <label>@Menu.MenuItemDescription</label>
                </td>
            </tr>              
        }
        else
        {
            <tr>
                <td align="left">
                    <input id="MenuCheckbox" name="@Menus.UIGroup" value="@Menus.@MenuItem" type="checkbox" />
                    <label>@Menu.MenuItemDescription</label>
                </td>
            </tr>
        }
        i++;
    }
</table>

3 个答案:

答案 0 :(得分:2)

为了获取POST操作中的菜单项列表,您需要将相应的值包含在html <form>中,因为这是一个集合,请遵循standard naming convention以便默认模型binder可以解析它们。

答案 1 :(得分:1)

首先,您应该向我们展示您了解如何呈现ViewModel的视图。 不过试试这个:

将部分视图设为您的MenyItem

的编辑器模板
<%@ Control Inherits="ViewUserControl<MenyItem>" %>

<%: Html.TextBoxFor(m => m.MenuItemCode) %>
<%: Html.TextBoxFor(m => m.MenuItemDescription) %>
.......

然后在你的视图中make for loop not foreach:

    <%@ Page Inherits="ViewPage<ModelViewTest>" %>

    <% using (Html.BeginForm()) {%>

    <% for (int i = 0; i < 3; i++) { %>

      <%: Html.EditorFor(m => m.MenuItemList[i]) %>

    <% } %>
<% } %>

请参阅此answer

答案 2 :(得分:0)

请参阅下面的观看代码段:

<table>
    @foreach (var menu in Model.MenuList)
    {
        if (menu.UIType == "Radio")
        {
        <tr>
            <td align="left">
                <input id="MenuCheckboxRadio" name="@Menus.UIGroup" value="@Menu.MenuItemCode"  type="radio" />
                <label>@Menu.MenuItemDescription</label>

            </td>
        </tr>              
        }
        else
        {
        <tr>
            <td align="left">
                <input id="MenuCheckbox" name="@Menus.UIGroup" value="@Menus.@MenuItem" type="checkbox" />
                <label>@Menu.MenuItemDescription</label>


            </td>
        </tr>

        }
        i++;
    }
</table>