【问题标题】:Foreach doesn't find nested classForeach 找不到嵌套类
【发布时间】:2016-08-24 22:53:00
【问题描述】:

我想为mvc页面做一个这样的模型:

public class Body
{
    public int Id { get; set; }

    public class Hand
    {
        public List<Fingers> fingers { get; set; }
    }

    public class Foot
    {
        public List<Toes> toes { get; set; }
    }

    public class Head
    {
        public Nose nose {get; set;}
        public List<Ears> ears { get; set; }
        public List<Eyes> eyes { get; set; }
    }
}

然后有一个像这样的手指类:

public class Fingers
{
    public int Id { get; set; }
    public string Description { get; set; }
}

然后在我看来这样访问它:

@model Models.Body
@foreach (var fingers in Model.Hand.Fingers)
{
    @Html.RadioButton("fingerList", fingers.Description)     
}

我的模型做错了吗?现在 VS 无法识别foreach 中的Model.Hand,更不用说Model.Hand.Fingers。我不想创建@modelIEnumerable,因为这个页面应该只显示一个person,但它可以有多个fingerstoes等列表。

【问题讨论】:

  • 错误是什么?它不编译?还是在执行时手指不显示?

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


【解决方案1】:

您的Body 类上没有Hand 属性。

除此之外,您的 Hand 类有 fingers,但在 razor 中,您使用 Fingers 引用它。

我不知道你是否真的打算让你的类被嵌套,但你需要为你想要的那些属性添加到你的 Body 类中(坚持你的属性大写约定):

public class Body
{
    public int Id { get; set; }
    public Hand hand { get; set; }
    public Foot foot { get; set; }
    public Head head { get; set; }

    public class Hand
    {
        public List<Fingers> fingers { get; set; }
    }

    public class Foot
    {
        public List<Toes> toes { get; set; }
    }

    public class Head
    {
        public Nose nose {get; set;}
        public List<Ears> ears { get; set; }
        public List<Eyes> eyes { get; set; }
    }
}

然后您需要使用与您的属性匹配的大小写来引用属性,而不是类名:

@model Models.Body
@foreach (var fingers in Model.hand.fingers)
{
    @Html.RadioButton("fingerList", fingers.Description)     
}

我还认为您的大小写/大写不正确,但这不是您问题的重点。

【讨论】:

【解决方案2】:

由于您访问的是 Body 类型模型的 Hand 属性,因此您应该在 Body 类中添加一个名为 Hand 的属性。

public class Hand
{
    public List<Fingers> Fingers { get; set; }
}
public class Body
{
    public int Id { get; set; }    
    public Hand Hand {set;get;}
    public Foot Foot { set;get;}
    public Head Head { set;get;}
}
public class Foot
{
    public List<Toes> toes { get; set; }
}
public class Head
{
   public Nose nose {get; set;}
   public List<Ears> ears { get; set; }
   public List<Eyes> eyes { get; set; }
}

现在在您的 GET 操作中,您需要初始化 Hand 属性

public ActionResult Index()
{
  var vm = new Body { Hand= new Hand { Fingers = new List<Finger>()} };
  return View(vm);
}

【讨论】:

    【解决方案3】:

    我认为您需要在 Body 类中使用名为 Fingers 的属性,而不是名为 Hand 的嵌套类:

    public List<Fingers> Fingers { get; set; }
    

    那么你可以:

    @foreach (var fingers in Model.Fingers)
    {
        @Html.RadioButton("fingerList", fingers.Description)     
    }
    

    【讨论】:

      【解决方案4】:

      您没有将属性添加到 Body 类!?

      public class Body
      {
          public int Id { get; set; }
      
          public Hand Hand {get;set;}
          public Foot Foot {get;set;}
          public Head Head {get;set;}
      }
      

      【讨论】:

        【解决方案5】:

        在我看来,您的模型缺少一些初始化;尚未调用任何二传手。所以……

        public class Hand
        {
            public Hand()
            {
              Fingers = new List<Fingers>();
            }
        }
        

        Hand 属性也是如此。很可能是null,不,你的foreach loop 不起作用。

        旁注:不要将您的班级名称复数。它应该是FingerToe,因为你有它的列表。

        【讨论】:

          猜你喜欢
          • 2020-07-11
          • 1970-01-01
          • 2014-02-27
          • 2010-11-18
          • 2013-03-23
          • 2019-09-12
          • 1970-01-01
          • 2023-03-17
          • 2018-08-18
          相关资源
          最近更新 更多