gpt4 book ai didi

c# - asp.net mvc 6 模型绑定(bind)到复杂集合 - IList

转载 作者:行者123 更新时间:2023-11-30 14:26:05 25 4
gpt4 key购买 nike

我正在尝试在 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>

Controller 代码

public async Task<IActionResult> Create(MainObject mainObj)
{
// The mainObj.ChildObjects remains empty.
}

我的 View 将只包含一个子对象条目,这就是为什么只使用 0 索引的原因。

表单数据包含上述键和值,但当它到达 Controller 操作时,集合属性为空,即 MainObject.ChildObjects 的计数为 0。(注意:ChildObjects 列表已在我的 MainObject 构造函数中初始化)

模型:

public class MainObject {
public MainObject() {
this.ChildObjects = new List<ChildObjects>();
}

public IList<ChildObject> ChildObjects {get; private set;}
}

在 Debug模式下查找构造函数中的 ModelState 属性时,它显示一个 ChildObjects 键错误,但错误消息过于笼统:

Object reference not set to instance of an object.

我在网上关注了很多关于模型绑定(bind)复杂集合的文章,但不知何故它对我不起作用。

最佳答案

使用private set 声明子对象集合会阻止 Binder 设置集合值。 setter 必须是 public 以便 MVC6 可以在回传中设置值;

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

当模型绑定(bind)器调用您声明的无参数构造函数时,集合仍然被实例化(而不是 null,因此 count == 0)。

关于c# - asp.net mvc 6 模型绑定(bind)到复杂集合 - IList<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36414516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com