asp.net mvc 6 模型绑定到复杂集合 - IList<T>
asp.net mvc 6 model binding to complex collection - IList<T>
我正在尝试在 asp.net mvc 6 中执行 post 操作,并希望正确初始化复杂的 属性 集合。但它总是空的。
我正在创建具有正确索引的输入 html 元素:
这是 HTML 表格 POST:
@model MainObject
<form asp-action="create" method="post">
<input asp-for="ChildObjects[0].RollNumber" />
<input type="submit" value="create" />
</form>
控制器代码
public async Task<IActionResult> Create(MainObject mainObj)
{
// The mainObj.ChildObjects remains empty.
}
我的视图将只包含一个子对象条目,这就是为什么只使用 0 个索引。
表单数据包含上述键和值,但当它到达控制器操作时,集合 属性 为空,即 MainObject.ChildObjects 的计数为 0。(注意:ChildObjects 列表已在中初始化我的 MainObject 构造函数)
型号:
public class MainObject {
public MainObject() {
this.ChildObjects = new List<ChildObjects>();
}
public IList<ChildObject> ChildObjects {get; private set;}
}
在调试模式下的构造函数中查找 ModelState 属性 时,它显示一个 ChildObjects 键错误,但错误消息过于笼统:
Object reference not set to instance of an object.
我在网上关注了很多关于模型绑定复杂集合的文章,但不知何故它对我不起作用。
使用 private set
声明子对象集合会阻止活页夹设置集合值。 setter 必须是 public
以便 MVC6 可以在回传中设置值;
public IList<ChildObject> ChildObjects {get; private set;} // empty on postback
public IList<ChildObject> ChildObjects {get; set;} // populated on postback
但是当模型绑定器调用您声明的无参数构造函数时,集合仍然被实例化(而不是 null,因此 count == 0
)。
我正在尝试在 asp.net mvc 6 中执行 post 操作,并希望正确初始化复杂的 属性 集合。但它总是空的。
我正在创建具有正确索引的输入 html 元素:
这是 HTML 表格 POST:
@model MainObject
<form asp-action="create" method="post">
<input asp-for="ChildObjects[0].RollNumber" />
<input type="submit" value="create" />
</form>
控制器代码
public async Task<IActionResult> Create(MainObject mainObj)
{
// The mainObj.ChildObjects remains empty.
}
我的视图将只包含一个子对象条目,这就是为什么只使用 0 个索引。
表单数据包含上述键和值,但当它到达控制器操作时,集合 属性 为空,即 MainObject.ChildObjects 的计数为 0。(注意:ChildObjects 列表已在中初始化我的 MainObject 构造函数)
型号:
public class MainObject {
public MainObject() {
this.ChildObjects = new List<ChildObjects>();
}
public IList<ChildObject> ChildObjects {get; private set;}
}
在调试模式下的构造函数中查找 ModelState 属性 时,它显示一个 ChildObjects 键错误,但错误消息过于笼统:
Object reference not set to instance of an object.
我在网上关注了很多关于模型绑定复杂集合的文章,但不知何故它对我不起作用。
使用 private set
声明子对象集合会阻止活页夹设置集合值。 setter 必须是 public
以便 MVC6 可以在回传中设置值;
public IList<ChildObject> ChildObjects {get; private set;} // empty on postback
public IList<ChildObject> ChildObjects {get; set;} // populated on postback
但是当模型绑定器调用您声明的无参数构造函数时,集合仍然被实例化(而不是 null,因此 count == 0
)。