我有自定义模型迭代foreach循环的问题。我正在尝试为剃刀创建动态菜单 这是我的代码:
型号:
public class MenuCtrlModel
{
public IList<Menu> menu { get; set; }
public IList<SubMenu> subMenu { get; set; }
}
控制器:
public PartialViewResult Index()
{
var nuser = dataContext.UserLogins.SingleOrDefault(x => x.nvrchrUsername == User.Identity.Name);
string[] menu = nuser.vcrMenu.ToString().Split('|').ToArray();
string[] subMenu = nuser.vcrSubmenu.ToString().Split('|').ToArray();
MenuCtrlModel menuctrl = new MenuCtrlModel();
menuctrl.menu = (from varMenu in dataContext.Menus where menu.Contains( Convert.ToString( varMenu.intMenuID ) ) select varMenu).ToList();
menuctrl.subMenu=(from varSubmenu in dataContext.SubMenus where
subMenu.Contains( Convert.ToString(varSubmenu.intSubMenu ) ) select varSubmenu ).ToList();
}
查看:
给了我错误**@model IList<MVCAPP.Models.MenuCtrlModel>
@foreach(var xyz in Model.select(x=>x.menu))
{
@Html.RouteLink(xyz.Select(x=>x.nvcrMenuName), new { controller = xyz.Select(x=>x.nvcrLink),action=xyz.Select(x=>x.nvcrLink) })}
}
**
我也试过
@foreach(var xyz in Model)
当我尝试找到像Model.Menu这样的菜单列表时,菜单没有出现在intellisense **中 请建议我该如何解决这个问题。
谢谢。
答案 0 :(得分:0)
由于Model
是MenuCtrlModel
的列表,其中每个都有menu
属性,Model.select(x=>x.menu)
将返回集合的集合。
我认为您想循环遍历每个项目,然后遍历每个项目中的菜单:
@foreach(var menuModel in Model))
@foreach(var menu in menuModel.menu))
虽然我无法分辨子菜单如何链接以帮助您。
答案 1 :(得分:0)
您将需要SelectMany,因为您的模型也是一个集合。
@model IList<MVCAPP.Models.MenuCtrlModel>
@foreach(var menu in Model.SelectMany(x => x.Menu))
{
@Html.RouteLink(menu.nvcrMenuName, new { controller = menu.nvcrLink, action=menu.nvcrLink })
}
或者IList<MVCAPP.Models.MenuCtrlModel>
错误,您的控制器代码似乎表明您实际上只有一个MenuCtrlModel
,因此模型行需要更正?
即
@model MVCAPP.Models.MenuCtrlModel
@foreach(var menu in Model.Menu)
{
@Html.RouteLink(menu.nvcrMenuName, new { controller = menu.nvcrLink, action=menu.nvcrLink })
}