MVC 4绑定列表的结果嵌套列表 [英] MVC 4 binding nested list of lists result

查看:136
本文介绍了MVC 4绑定列表的结果嵌套列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经做了这方面的一些研究,似乎找到那些过期或在我的情况不太工作岗位。我可能虽然... = /

I've done some research on this and seem to find posts that are either outdated or don't quite work in my situation. I may be using wrong keywords when searching though... =/

在我的网页我有一个包含包含行又包含项目组盒标签。
因此它是表4个级别的列表。

On my web page I have Tabs containing Group boxes that contain Lines which in turn contain Items. So it is lists of lists 4 levels.

问题:

当回发,ViewModel.Tabs为空,我不能救什么。
一切都显示相当不错,但没有张贴回来了。

When posting back, ViewModel.Tabs is null and I can't save anything. Everything displays quite nicely, but nothing is posted back.

在code

查看/共享/ EditorTemplates / Tab.cshtml

@model AWMCCRM.Web.ViewModels.Tab

@Html.HiddenFor(vm => vm.Name)
<div id="tab-@Model.Name.Replace(" ", 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="_@Model.DisplaySize" 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">
}

有什么建议?

感谢

推荐答案

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

这是一个老的文章,但它仍然适用。

It's an old article, but it still applies.

我有这个确切的问题,但基本上是由于你需要使用显式的循环,而不是一个foreach循环,并通过它们的索引引用元素上的模型绑定系统。

I had this exact problem, but basically due to the model binding system you need to use an explicit for loop instead of a foreach loop, and reference your elements by their index.

@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">
}

这篇关于MVC 4绑定列表的结果嵌套列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆