循环遍历另一个对象的属性对象的值

时间:2014-11-06 17:06:35

标签: asp.net-mvc oop loops

我有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>();
    }
}

2 个答案:

答案 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()