2013-08-02 50 views
2

我已經做了這方面的一些研究,似乎發現是過期或在我的情況不太工作崗位。我雖然可以在搜索時使用錯誤的關鍵詞... =/MVC 4綁定列表的嵌套列表導致

在我的網頁我有一個包含包含行又包含項目組盒標籤。 所以它是列表4個級別的列表。

問題:

當回發,ViewModel.Tabs爲空,我不能保存任何。 所有內容都顯示得非常好,但沒有任何內容可以發回。

代碼

查看/共享/ EditorTemplates/Tab.cshtml

@model AWMCCRM.Web.ViewModels.Tab 

@Html.HiddenFor(vm => vm.Name) 
<div id="[email protected](" ", string.Empty)" class="tab-content two"> 
    @Html.EditorFor(vm => vm.Groups) 
</div> 

查看/共享/ EditorTemplates/Group.cshtml

@model AWMCCRM.Web.ViewModels.Group 
@Html.HiddenFor(vm => vm.Name) 
<fieldset> 
    <legend>@Model.Name</legend> 
    @Html.EditorFor(vm => vm.Lines) 
</fieldset> 

查看/共享/EditorTemplates/Line.cshtml

@model AWMCCRM.Web.ViewModels.Line 
<div class="_100Max"> 
@Html.HiddenFor(vm => vm.Name) 
@Html.EditorFor(vm => vm.Items) 
</div> 

查看/共享/ EditorTemplates/Item.cshtml

@model AWMCCRM.Web.ViewModels.Item 

<div class="[email protected]" title="@Model.Description"> 
    <p> 
     @Html.HiddenFor(x => x.DataType) 
     @Html.HiddenFor(x => x.Description) 
     @Html.HiddenFor(x => x.DisplaySize) 
     @Html.HiddenFor(x => x.DisplayType) 
     @Html.HiddenFor(x => x.IDsPiped) 
     @Html.HiddenFor(x => x.ItemType) 
     @Html.HiddenFor(x => x.Name) 

     @Html.LabelFor(vm => vm.Value, Model.Name) 
     @switch (Model.DisplayType.ToLower().Replace(" ", string.Empty)) 
     { 
      case "checkbox": 
       @Html.CheckBoxFor(vm => Convert.ToBoolean(vm.Value)) 
       break; 
      case "dropdownlist": 
       @Html.DropDownListFor(vm => vm.Value, Model.ValueOptionListItems) 
       break; 
      case "multiselectlist": 
       @Html.ListBoxFor(
        x => x.SelectedValueList, 
        Model.ValueOptionListItems, 
       new { id = "itemValuesMultiSelect", multiple = "multiple", Size = 15 }) 
       break; 
      case "radiobutton": 
       @Html.RadioButtonFor(vm => vm.Value, Model.Value) 
       break; 
      case "textarea": 
       @Html.TextAreaFor(vm => vm.Value) 
       break; 
      default: 
       @Html.TextBoxFor(vm => vm.Value) 
       break; 
     } 
    </p> 
</div> 

的視圖模型(削減版本)

namespace AWMCCRM.Web.ViewModels 
{ 
    public class PersonEditViewModel 
    { 
     public List<Tab> Tabs { get; set; } 

     //Other properties 
     //... 

    } 
} 

的視圖(削減版本)

@using (Html.BeginForm("Edit", "Person", FormMethod.Post, new { id = "validate-form", @class = "block-content form" })) 
{ 
    @Html.AntiForgeryToken() 
    @Html.HiddenFor(x => x.PersonID) 
    @foreach (var tab in Model.Tabs) 
    { 
     @Html.EditorFor(vm => tab) 
    } 
    <input class="close-toolbox button" type="submit" value="Save"> 
} 

有什麼建議?

感謝

回答

4

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

這是一個老的文章,但它仍然適用。

我有這個確切的問題,但基本上是由於模型綁定系統,您需要使用顯式的for循環,而不是一個foreach循環,並通過它們的索引引用您的元素。

@using (Html.BeginForm("Edit", "Person", FormMethod.Post, new { id = "validate-form", @class = "block-content form" })) 
{ 
    Html.AntiForgeryToken() 
    Html.HiddenFor(x => x.PersonID) 
    for (int i = 0; i<Model.Tabs.Count; i++) 
    { 
     Html.EditorFor(x => Model.Tabs[i]) 
    } 
    <input class="close-toolbox button" type="submit" value="Save"> 
} 
+0

完美!它的工作原理,謝謝。 – PostureOfLearning