遍历对象的值,这是另一个对象的属性
问题描述:
我有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)
}
答
另一种方法是为模型创建显示模板并使用@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()
我宁愿看到一个'foreach'而不是这样,但无论如何+1。 – DavidG 2014-11-06 17:26:42
非常感谢你安迪尼科尔斯:) – 2014-11-06 17:34:57