2012-05-11 53 views
1

我一直沒有使用MVC3這麼長時間,並認爲這是我的知識中的一個缺陷,而不是真正的問題。MVC3 Razor httppost返回複雜對象子集合

我有一個具有幾個基本的屬性的對象,然後內對象的集合,(簡化版本):

public class myClass 
{ 
    public string Name { get; set; } 
    public string Location { get; set; } 
    public List<myOtherClass> Children { get; set; } 
} 

public class myOtherClass 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

我有一個是強類型的「myClass的」對象的圖。我使用@ html.editorfor作爲名稱和位置,然後是針對子對象的foreach。在foreach中,我再次使用editorfor的每個屬性。

回發(httppost動作)myClass名稱和位置被填寫,但子列表是空的。

我不知道如何製作視圖以確保它填充所有子元素。

我都嘗試:

[httppost] 
public actionresult myaction(myClass myclass) 
{ 
} 

和:

[httppost] 
public actionresult myaction() 
{ 
    myClass myclass = new myClass(); 
    TryUpdateModel(myclass); 
} 
+0

必須爲CHILDES創建循環。閱讀下面的示例 – Morteza

回答

3

你不應該在孩子手動循環,你應該定義編輯模板myOtherClass,然後才讓框架生成所有項目集合編輯器。

~/Views/Shared/EditorTemplates/myOtherClass.cshtml

@model myOterClass 
@Html.EditorFor(model => model.Name) 
@Html.EditorFor(model => model.Age) 

然後在父視圖中創建EditorTemplate爲myOtherClass

@Html.EditorFor(model => model.Children) 

這將在內部調用在集合中的所有項目的編輯模板,並生成模型綁定正確的輸入名稱。

2
在查看

@for (int i = 0; i < Model.Children.Count; i++) 
{ 
    <div class="editor-field"> 
    @Html.EditorFor(m => m.Children[i].Name) 
    </div> 

} 

和控制器:

public ActionResult Test() 
{ 
    var model = new myClass(); 
    model.Name = "name"; 
    model.Location= "loc"; 

    model.Children = new List<myOtherClass>(); 
    var child1 = new myOtherClass(); 
    child1.Name = "Name1"; 

    var child2 = new myOtherClass(); 
    child2.Name = "Name2"; 

    model.Children.Add(child1); 
    model.Children.Add(child2); 
    return View(model); 
} 

[HttpPost] 
public ActionResult Test(myClass model) 
{ 
    //model.Children Has Value 
}