2016-04-29 51 views
4

我要作出這樣的MVC頁面的模型:的foreach沒有找到嵌套類

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多個列表等

+0

什麼是錯誤?它不comp'le?或者在執行時間手指不顯示? – DanielVorph

回答

6

Body類沒有財產Hand就可以了。

除此之外,你的手類有fingers,但在剃鬚刀中你可以用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)  
} 

我也認爲你的套管/市值不正確,但是這不是你的問題的地步。

+0

使它們嵌套的優點/缺點是什麼 – tshoemake

+0

這是另一個線程的討論。但這裏有一個兔子洞,你可以下去:http://stackoverflow.com/questions/1083032/why-would-i-ever-need-to-use-c-sharp-nested-classes – Tim

+0

會做,感謝的人 – tshoemake

2

由於您正在訪問您的模型的Body屬性是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財產

​​
2

我認爲你需要一個叫做Fingers財產在你Body類而不是一個嵌套類稱爲Hand

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

那麼你可以:

@foreach (var fingers in Model.Fingers) 
{ 
    @Html.RadioButton("fingerList", fingers.Description)  
} 
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;} 
} 
2

它在我看來你的模型是缺少一些itinialization;還沒有調用者被調用。所以...

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

同樣適用於Hand屬性。這可能是null,沒有你的foreach loop將無法​​正常工作。

附註:不要複數你的類名。它應該是FingerToe,因爲你有一個清單。