【问题标题】:Static SelectList asp.net MVC issue静态 SelectList asp.net MVC 问题
【发布时间】:2014-05-25 21:27:37
【问题描述】:

我正在尝试创建一个包含静态项目 model.satsList 的选择列表,然后将所选项目设置为 model.SelectedStatsList

这是我的模特:

    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

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    (一个解决方案)您可以在项目解决方案中使用单独的帮助程序类来处理页面上的静态数据。例如:

    //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=> model.SelectedStatsList, ... )

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        只需替换这个(model.SelectedStatsList):

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

        有了这个(StatModel.SelectedStatsList):

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

        【讨论】:

        • 问题出在 Model.statList 中。
        • 是的,这就是我的意思,我把两者搞混了(错字)。所以用 StateModel.statList 替换 Model.statList。我会更新答案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-27
        相关资源
        最近更新 更多