Asp.net mvc 在MVC中将模型绑定到视图的正确方法?

Asp.net mvc 在MVC中将模型绑定到视图的正确方法?,asp.net-mvc,asp.net-mvc-4,data-binding,Asp.net Mvc,Asp.net Mvc 4,Data Binding,我是mvc的新手。我有一个菜单设置页面,用户可以在其中根据自己的角色添加菜单。为此,我想创建一个视图。如何将模型绑定到视图以正确保存设置。我关心的是如何访问viewmodel中的ienumerable项,viewmodel也应该是ienumerable。在这里,我无法将viewmodel转换为ienumerable 任何帮助都将不胜感激 模型类是 public partial class Role { public int Id { get; set; } public str

我是mvc的新手。我有一个菜单设置页面,用户可以在其中根据自己的角色添加菜单。为此,我想创建一个视图。如何将模型绑定到视图以正确保存设置。我关心的是如何访问viewmodel中的ienumerable项,viewmodel也应该是ienumerable。在这里,我无法将viewmodel转换为ienumerable

任何帮助都将不胜感激

模型类是

 public partial class Role
{
    public int Id { get; set; }
    public string RoleName { get; set; }
    public Nullable<int> ParentID { get; set; }

    public virtual ICollection<MenuRole> MenuRoles { get; set; }
}
 public partial class Menu
{
    public int Id { get; set; }
    public string MenuName { get; set; }
    public string NavigateUrl { get; set; }
    public Nullable<int> ParentID { get; set; }

    public virtual ICollection<MenuRole> MenuRoles { get; set; }
}    
 public class MenuRoleVM
{
    public int? RoleId { get; set; }
    public SelectList RoleList { get; set; }
    public IEnumerable<Menu> MenuList { get; set; }
}
 public class MenuSettingsController : Controller
{              

    public ActionResult Add()
    {
        var _menuRoleVM = new MenuRoleVM
        {
            RoleList = new SelectList(_db.Roles.ToList(), "Id", "RoleName"),
            MenuList = _db.Menus
                    .Where(m => m.NavigateUrl != "#").ToList()
        };
        return View(_menuRoleVM);

    }        
}

下面的例子会有所帮助。在这里,我有一个带有属性的模型ContactModel——FirstName、LastName和Email

@model IEnumerable
@{
ViewBag.Title=“Index”;
}
指数

@ActionLink(“新建”、“创建”)

@DisplayNameFor(model=>model.FirstName) @DisplayNameFor(model=>model.LastName) @DisplayNameFor(model=>model.Email) @foreach(模型中的var项目){ @DisplayFor(modelItem=>item.FirstName) @DisplayFor(modelItem=>item.LastName) @DisplayFor(modelItem=>item.Email) @ActionLink(“编辑”,“编辑”,新的{id=item.id})| @ActionLink(“详细信息”,“详细信息”,新的{id=item.id})| @ActionLink(“删除”,“删除”,新的{id=item.id}) }
感谢您的输入@Stephen

我通过如下添加视图来运行代码

@foreach (var item in Model.MenuList.Select((x, i) => new {Data=x,Index=i }))
                            {
                                <tr>
                                    <td>@(item.Index+1)</td>
                                    <td>@item.Data.MenuName</td>                                        

                                </tr>
                            }             
@foreach(Model.MenuList.Select((x,i)=>new{Data=x,Index=i})中的var项)
{
@(项目索引+1)
@item.Data.MenuName
}             

您已经正确地传递了模型,但是绑定取决于您在视图中如何使用它。您可以将视图强类型化,并在表单中使用属性,以便在发布后接收这些属性。小示例将非常有用。我关心的是如何访问viewmodel中的ienumerable项,viewmodel也应该是ienumerable。在这里,我无法将viewmodel转换为ienumerable。如果您的意思是要在property
MenuList
中显示每个
菜单
,则不必,视图模型不必是
ienumerable
——您可以循环查看
MenuList
中的每个项目(即
ienumerable