我有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>();
}
}
答案 0 :(得分:1)
您的菜单类没有多大意义,因为它意味着链接,操作和控制器名称是三组不同的项目。实际上,有一组菜单项,每个菜单项包含一个链接,动作和控制器。所以这意味着您可以将Menu重写为:
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)
}
答案 1 :(得分:0)
另一种方法是为模型创建显示模板并使用@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()