Jas*_*ash 3 c# model-binding asp.net-core-mvc asp.net-core
我正在尝试在asp.net mvc 6中进行后期操作,并期望正确初始化复杂的属性集合.但它总是空的.
我正在创建具有适当索引的输入html元素:
这是POST的HTML表单:
@model MainObject
<form asp-action="create" method="post">
<input asp-for="ChildObjects[0].RollNumber" />
<input type="submit" value="create" />
</form>
Run Code Online (Sandbox Code Playgroud)
控制器代码
public async Task<IActionResult> Create(MainObject mainObj)
{
// The mainObj.ChildObjects remains empty.
}
Run Code Online (Sandbox Code Playgroud)
我的视图将只包含一个子对象条目,这就是为什么只使用0索引.
表单数据包含上面的键和值,但是当它到达控制器操作时,collection属性为空,即MainObject.ChildObjects的计数为0.(注意:ChildObjects列表已在我的MainObject构造函数中初始化)
楷模:
public class MainObject {
public MainObject() {
this.ChildObjects = new List<ChildObjects>();
}
public IList<ChildObject> ChildObjects {get; private set;}
}
Run Code Online (Sandbox Code Playgroud)
在调试模式下在构造函数中查找ModelState属性时,它显示ChildObjects键的一个错误,但错误消息过于通用:
对象引用未设置为对象的实例.
我已经在网上关注了很多关于模型绑定复杂集合的文章,但不知何故它对我不起作用.
使用private set块声明子对象集合,绑定器设置集合值.setter必须是public这样MVC6可以设置回发中的值;
public IList<ChildObject> ChildObjects {get; private set;} // empty on postback
public IList<ChildObject> ChildObjects {get; set;} // populated on postback
Run Code Online (Sandbox Code Playgroud)
count == 0当模型绑定器调用您声明的无参数构造函数时,仍然会实例化集合(而不是null,因此).
| 归档时间: |
|
| 查看次数: |
4473 次 |
| 最近记录: |