2017-07-06 62 views
-1

我無法通過ParnetModel將值提供給ChildModel,並訪問View中的我的ChildModel。或者我應該創建一個自己的ViewModel,在視圖中需要它的那些值?訪問控制器中的ChildModel並通過ParentModel查看

這裏是我的ParentModel

public class ParentModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public ChildModel ChildModel { get; set; } 
    public List<ChildModel> ChildModelList { get; set; } 
} 

和ChildModel

public class ChildModel 
{ 
    public int Number { get; set; } 
    public string ChildName { get; set; } 
} 

在控制器我要填補Parentmodel +的Childmodel,並把它交給查看

List<ParentModel> listparent = new List<ParentModel>(); 
listparent.Add(
    new ParentModel 
    { 
     Id = 1, 
     Name = "abc", 
     ChildModel.Number = 2, // does not work 
     ChildModelList.Number = 2 // does not work 
    } 
); 

我不知道如何在這裏訪問ChildModel,當我想爲它添加值時。

在視圖中,我也必須訪問孩子。我加了ParentModel有:

@model List<TestApp4.Models.ParentModel> 

然後,我會盡量做到他們viea:

@foreach (var item in Model) 
{ 
    @item.Id 
    @item.Name 
    @item.ChildModel.Number 
} 

這是行不通的。我是對的,控制器必須是List,否則我無法在View中迭代它?

回答

1

那麼,ChildModel是一個類,所以你必須先創建一個新的實例。

而且ChildModel是一個通用的列表,所以你必須創建列表的一個實例,並在您的視圖中添加泛型類型的實例

listparent.Add(
    new ParentModel 
    { 
     Id = 1, 
     Name = "abc", 
     ChildModel = new ChildModel {Number = 2}, 
     ChildModelList = new List<ChildeModel>(new[]{ 
           new ChildModel{Number=1}, 
           new ChildModel{Number= xxx} 
           }) 
    } 
); 

所以,你可以有這樣的事情

@foreach (var item in Model) 
{ 
    @item.Id 
    @item.Name 
    @item.ChildModel.Number //you may check for null if ChildModel is not always declared 
    foreach(var cm in item.ChildModelList) {//nul check may also be usefull 
     @c.Number 
    } 
} 

您可以在您的ParentModel類的構造函數中創建ChildModelList的實例,以確保您有一個現有實例ChildModelList

public class ParentModel 
{ 
    public ParentModel() { 
     ChildModelList = new List<ChildModel>(); 
    } 
    //and even a ctor with a given number to instanciate ChildModel 
    public ParentModel(int childNumber) : this() { 
     ChildModel = new ChildModel{Number = childNumber}; 
    } 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public ChildModel ChildModel { get; set; } 
    public List<ChildModel> ChildModelList { get; set; } 
} 
+0

謝謝。你認爲這是解決這個問題或製作自己的視圖模型最優雅的方法嗎? –

+0

好吧,對於單個屬性,您應該將其平鋪(屬性ChildModelNumber,例如,替換ChildModel.Number),但對於列表,我想您沒有選擇該選項。 –