在MVC3中绑定到列表的问题
本文关键字:列表 问题 绑定 MVC3 | 更新日期: 2023-09-27 17:50:32
我一直在尝试将视图绑定到这里描述的对象列表模型绑定到列表
我的问题是,当列表通过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);
}
和"Create"视图的代码:
@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
的1个项目的列表,但是当我在Create(IList<Models.Test> tests)
上断点时,测试包含包含x = 0
的1个对象。
你知道我错过了什么吗?
尝试这两个更改:
测试类:
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>
}
我已经尝试了你的代码,问题是Test
类中的x
是字段和而不是属性,因此默认的模型绑定器无法从发布的表单设置值。Test
类应该像这样:
public class Test
{
public int X {get; set;}
}