剃刀的foreach型号列表

问题描述:

什么,我试图做的是在剃刀页上的列表显示每个项目:剃刀的foreach型号列表

_layout.cshtml

<div id="LeftSidebar"> 
    <ul> 
     @foreach (var x in MenuItems.Items) 
     { 
      <li><a href="#">@x.ItemName </a></li> 
     } 
    </ul> 
</div> 

menu.cs

public class Menu 
{ 
    public string ItemName { get; set; } 
    public string Alt { get; set; } 

    public Menu() 
    { 

    } 

    public Menu(string itemName, string alt) 
    { 
     ItemName = itemName; 
     Alt = alt; 
    } 

} 

public class MenuItems 
{ 
    public static List<Menu> Items = new List<Menu>(); 
    public MenuItems() 
    { 
     Items.Add(new Menu 
      { 
       Alt = "test item", 
       ItemName = "item 1", 
      }); 
     Items.Add(new Menu 
     { 
      Alt = "test item", 
      ItemName = "item 2", 
     }); 
    } 
} 

多数民众赞成我到目前为止,但它不显示任何东西?

感谢 Houlahan

+1

你没有发布控制器/动作... – asawyer

这是因为你从来没有创建的MenuItems类作为您刚刚访问静态字段的类的实例 - 因此构造没有运行,并且将两个测试项目。

尝试用静态构造函数替换的MenuItems构造:

public class MenuItems 
{ 
    public static List<Menu> Items; 

    static MenuItems() 
    { 
     Items = new List<Menu>(); 

     Items.Add(new Menu 
     { 
      Alt = "test item", 
      ItemName = "item 1", 
     }); 
     Items.Add(new Menu 
     { 
      Alt = "test item", 
      ItemName = "item 2", 
     }); 
    } 
} 

这将确保当您访问使用MenuItems.Items它的各个项目领域被填满。

+0

即时通讯不知道我会怎么做(我很新的MVC3&剃须刀)我必须作出局部视图?然后打电话给控制器? – Houlahan

+0

我想你可以添加一个静态构造函数。 – asawyer

+0

或者如果你想保留上面的模式,那么只需用静态构造函数替换MenuItems构造函数-http://msdn.microsoft.com/en-us/library/k9x6w0hc(v = vs.80).aspx –