开发者

How to bind a List of ViewModel in ASP MVC?

开发者 https://www.devze.com 2023-02-20 21:33 出处:网络
Does anyone know how to get POST values for MODELVIEW Pattern below. I can display the MenuItem as Checkboxes and Radio buttons,

Does anyone know how to get POST values for MODELVIEW Pattern below. I can display the MenuItem as Checkboxes and Radio buttons, but when user submits the form i.e. POST, ModelViewTest is null. I'm expecting List of MenuItems that user have selected.

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

ACTIONS:

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 Class:

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

Update

Please see my View code snippet below:

<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">
 开发者_JAVA百科                   <input id="MenuCheckbox" name="@Menus.UIGroup" value="@Menus.@MenuItem" type="checkbox" />
                    <label>@Menu.MenuItemDescription</label>
                </td>
            </tr>
        }
        i++;
    }
</table>


In order to get the list of menu items in the POST action you need their corresponding values must be included in the html <form> and because this is a collection follow the standard naming convention so that the default model binder can parse them.


First you should show us your view to know how you render your ViewModel. However try this:

make partial view to be editor template for your MenyItem

<%@ Control Inherits="ViewUserControl<MenyItem>" %>

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

then in your view 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]) %>

    <% } %>
<% } %>

And please see this answer


Please see my View code snippet below:

<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>
0

精彩评论

暂无评论...
验证码 换一张
取 消