2014-05-25 34 views
0

什么是我试图创建静态项model.satsList,然后选择项目的选择名单将在model.SelectedStatsList静态的SelectList asp.net MVC问题

设置这是我的模型:

public class StatModel 
{ 
     public IEnumerable<int> SelectedItemsRegion { set; get; } 

     public IEnumerable<string> SelectedStatsList { get; set; } 
     public static List<SelectListItem> statList = new List<SelectListItem>() 
       { 
        new SelectListItem() {Text="Request Number", Value="demandeR"}, 
        new SelectListItem() { Text="agR", Value="agR"} 
       };     
} 

我观点:

@Html.DropDownListFor(model=> model.SelectedStatsList, Model.statList) 

我得到这个错误:

'pfebs0.Models.StatModel.statList' cannot be accessed with an instance reference; qualify it with a type name instead 

回答

0

你的问题是基本的C#使用问题。您正尝试通过实例访问静态字段public static List statList,即您在剃刀视图中拥有的模型。

只需更换这(model.SelectedStatsList):

@Html.DropDownListFor(model=> model.SelectedStatsList, Model.statList) 

有了这个(StatModel.SelectedStatsList):

@Html.DropDownListFor(model=> model.SelectedStatsList, StatModel.statList) 
+0

该问题在Model.statList中。 – Chlebta

+0

是的,这就是我的意思,我把这两个混在一起(错字)。所以用StateModel.statList替换Model.statList。我会更新答案 – Mzn

0

(一体化解决方案)可以有一个单独的辅助类项目中的解决方案处理页面上的静态数据。例如:

//Helper.cs

public Helper class(){ 
    public static List<SelectListItem> GetStatList(){ 
     return new List<SelectListItem>() 
      { 
       new SelectListItem() {Text="Request Number", Value="demandeR"}, 
       new SelectListItem() { Text="agR", Value="agR"} 
      };     
    } } 

,并在控制器类这份名单只是绑定到你的模型类,如下:

//MyController.cs

public ActionResult MyModel(){ 
    var model = new MyModel(); 
    model.SelectedStatsList = Helper.GetStatList(); 
    return View("MyView", model); 
} 

确保您在模型类上有一个正确的属性来设置上面的statlist。 并在你看来,你将有:

@ Html.DropDownListFor(型号=> model.SelectedStatsList,...)

0

只需更改如下您的视图代码:

@Html.DropDownListFor(model=> model.SelectedStatsList,pfebs0.Models.StatModel.statList) 
    // Assuming pfebs0.Models is the namespace for the StatModel 

在C#中,您无法从实例访问静态属性。在这种情况下,视图中的属性Model是正在传入的模型的实例。

换句话说,您可以直接访问静态属性而无需创建对象的实例。