遍历对象的值,这是另一个对象的属性

问题描述:

我有2个对象,用户和菜单,我要循环到User.Menu来创造这样的链接:遍历对象的值,这是另一个对象的属性

@for (int i = 0; i < _Usuario.Menu.Count(); i++) 
{ 
    @Html.ActionLink(Convert.ToString(_Usuario.Menu.LinkName), Convert.ToString(_Usuario.Menu.ActionName),     Convert.ToString(_Usuario.Menu.ControllerName)) 
} 

但是我没有计数器对于User.Menu,这怎么可能完成?因为这意味着该链接,动作和控制器的名称是项目的三套独立

public class User 
{ 
    public Int64 Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public DateTime LoginTime { get; set; } 
    public Menu Menu { get; set; } 
    public List<string> Objects { get; set; } 
    public List<string> Controllers { get; set; } 
    //public List<string> Roles { get; set; } 

    public User() 
    { 
     Objects = new List<string>(); 
     Controllers = new List<string>(); 
    } 
} 

public class Menu 
{ 
    public List<string> LinkName { get; set; } 
    public List<string> ActionName { get; set; } 
    public List<string> ControllerName { get; set; } 

    public Menu() 
    { 
     LinkName = new List<string>(); 
     ActionName = new List<string>(); 
     ControllerName = new List<string>(); 
    } 
} 

你的菜单类没有太大的意义。实际上,有一组菜单项每个都包含一个链接,操作和控制器。因此,这意味着你可以重写菜单:

public class Menu 
{ 
    public List<MenuItem> Items { get; set; } 

    public Menu() 
    { 
     Items = new List<MenuItem>(); 
    } 
} 

public class MenuItem 
{ 
    public string LinkName { get; set; } 
    public string ActionName { get; set; } 
    public string ControllerName { get; set; } 
} 

你必须重写代码,设置了菜单,但应该是很容易做到。 然后,在您的视图中很容易循环。

@for (int i = 0; i < _Usuario.Menu.Items.Count(); i++) 
{ 
    @Html.ActionLink(_Usuario.Menu.Items[i].LinkName, _Usuario.Menu.Items[i].ActionName, _Usuario.Menu.Items[i].ControllerName) 
} 
+0

我宁愿看到一个'foreach'而不是这样,但无论如何+1。 – DavidG 2014-11-06 17:26:42

+0

非常感谢你安迪尼科尔斯:) – 2014-11-06 17:34:57

另一种方法是为模型创建显示模板并使用@Html.DisplayFor()。这样你就不用担心循环,因为它会为你做。这是保持剃须刀视图干净整洁的好方法。

public class MenuItem 
{ 
    public string LinkName { get; set; } 
    public string ActionName { get; set; } 
    public string ControllerName { get; set; } 
} 

显示模板(menuitem.cshtml):

@model MenuItem 

@Html.ActionLink(Model.LinkName, Model.ActionName, Model.ControllerName) 

查看:

@model IEnumerable<MenuItem> 
@Html.DisplayForModel()