麻烦绑定到MVC3中的列表

时间:2013-01-04 03:25:41

标签: c# asp.net-mvc list binding

我一直在尝试将视图绑定到对象列表,如Model Binding To A List

所述

我的问题是当通过POST返回列表时,列表包含我最初发送的正确数量的元素,但对象中的值将返回,就好像它们从未设置过一样。不确定我错过了什么使模型绑定器正确解析。

这是我的测试代码:

我的模特是:

IList<Test>

其中Test定义为:

public class Test
{
    public int x;
}

在我的TestController中,我使用的方法是“Create”,它有一个回发:

public ActionResult Create()
    {

        List<Models.Test> testList = new List<Models.Test>() {
            new Models.Test() { x = 5 }
        };

        return View(testList);
    }

    //
    // POST: /Test/Create

    [HttpPost]
    public ActionResult Create(IList<Models.Test> tests)//Models.TestContainer tc)
    {
        return View(tests);
    }

和“创建”视图的代码:

@model IList<ksg.Models.Test>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>TestContainer</legend>
       @Html.EditorFor(x => x[0])
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

最后,我的Test类的编辑器模板:

@model ksg.Models.Test
@using ksg.Helpers
<div>
@Html.TextBoxFor(x => x.x)
</div>

如上所示,我发送了一个包含Test.x = 5项目的列表,但是当我在Create(IList<Models.Test> tests)上断点时,测试包含1个x = 0的对象。

我错过了哪些想法?

2 个答案:

答案 0 :(得分:5)

尝试以下两项修改:

测试类:

      public class Test
      {
         public int x { get; set; }
      }

Create.cshtml

    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)

        <fieldset>
            <legend>TestContainer</legend>
               @Html.EditorFor(x => x[0].x)   @*<--*@
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }

答案 1 :(得分:2)

我已经尝试过您的代码,问题是x类中的Test字段不是属性,因此默认的模型绑定器不能从发布的表单中设置值。 Test类看起来像这样:

public class Test
{
    public int X {get; set;}
}

然后它有效。