Foreach找不到嵌套类

时间:2016-04-29 17:16:10

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

我想为这样的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无法识别Model.Hand中的foreach,更不会识别Model.Hand.Fingers。我不想制作@model IEnumerable,因为此页面只应显示一个person,但它可以有多个fingerstoes列表,等

5 个答案:

答案 0 :(得分:6)

您的Body课程上没有属性Hand

除此之外,你的Hand课程有fingers,但在剃须刀中你用Fingers引用它。

我不知道你是否真的打算让你的课程嵌套,但是你需要在你的Body课程中添加你想要的属性(坚持你的属性大写惯例): / p>

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)     
}

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

答案 1 :(得分:2)

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

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);
}

答案 2 :(得分:2)

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

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

然后你可以:

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

答案 3 :(得分:2)

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

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

    public Hand Hand {get;set;}
    public Foot Foot {get;set;}
    public Head Head {get;set;}
}

答案 4 :(得分:2)

在我看来,你的模型缺少一些itinialization;还没有召集人。所以......

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

Hand属性也是如此。可能null,您的foreach loop无效。

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