首页 > 解决方案 > ASP.NET Core 3.1 绑定到列表(通用列表)属性不起作用

问题描述

我正在尝试在 ASP.NET Core 3.1 下的 NopCommerce 内部实现一个控制器方法,如下所示:

[HttpPost]
[Route("CustomerSchool/Update")]
public IActionResult Update(CustomerSchoolMappingModel model)
{

}

我的模型如下所示:

public class CustomerSchoolMappingModel : BaseNopModel
{
    public int CustomerId { get; set; }

    public List<int> SchoolIds { get; set; } = new List<int>();
}

当我提交带有以下表单数据的 http POST 时:

CustomerId: 1
SchoolIds[0]: 2
SchoolIds[1]: 3

我的属性已成功绑定,但不是始终返回空的 SchoolIds 属性集合。

我怀疑 NopCommerce 已经替换了默认的模型绑定器(我相信在 ASP.NET 中默认支持此功能),但我不是 100% 确定如何正确替换/实现此功能。

我相信使用自定义IModelBinderProvider来解决这个问题是可行的,但我想知道解决这个问题的正确/最佳方法是什么,并确保我可以name[x] form schema在我的 ASP.NET Core 应用程序中使用正确绑定通用列表?

标签: c#asp.netformsasp.net-corenopcommerce

解决方案


因此,对于任何感兴趣的人来说,这似乎归结为 Nop 不喜欢使用通用列表。

我从这里查看了 Nop 使用的默认绑定器,我能够通过将模型更改为此成功地解决我的问题:

public class CustomerSchoolMappingModel : BaseNopModel
{
    public int CustomerId { get; set; }

    public ICollection<int> SchoolIds { get; set; } = new List<int>();

}

推荐阅读