在MVC中绑定模型以查看的正确方法?

时间:2015-09-17 06:29:22

标签: asp.net-mvc asp.net-mvc-4 data-binding

我是mvc的新手。我有一个菜单设置页面,用户可以根据他的角色添加菜单。为此我想创建一个视图。如何绑定模型以正确查看,以便我可以保存设置。我关注是为了访问viewmodel中的可见项,viewmodel也应该是ienumerable。这样我就无法将viewmodel转换为ienumerable。

非常感谢任何帮助

ModelClass

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

ViewModel

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

    }        
}

2 个答案:

答案 0 :(得分:0)

下面的示例将有所帮助。在这里,我的模型ContactModel具有属性 - FirstName,LastName和Email。

&#13;
&#13;
@model IEnumerable<CrazyContacts.Models.ContactModel>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.FirstName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.LastName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Email)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}

</table>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

感谢您输入@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>
                            }