asp.net的MVC 6型结合复杂的集合 - 的IList

问题描述 投票:2回答:1

我试图做在asp.net mvc的6 POST操作并期待复杂的属性集合进行正确的初始化。但它始终是空的。

我创建适当的索引输入HTML元素:

这是POST HTML表单:

@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关键的一个错误,但错误信息是太普通了:

对象引用不设置到对象的实例。

我按照净为模型绑定复杂收集了许多文章,但不知何故,它不是为我工作。

c# asp.net-core asp.net-core-mvc model-binding
1个回答
6
投票

声明子对象集合与private set阻止设置收藏价值的粘合剂。设定器必须public所以MVC6可以设置在回发的值;

public IList<ChildObject> ChildObjects {get; private set;} // empty on postback
public IList<ChildObject> ChildObjects {get; set;} // populated on postback

该集合但是仍然实例化(而不是空的,因此count == 0)当模型绑定调用声明该参数的构造函数。

© www.soinside.com 2019 - 2024. All rights reserved.