.net core2.2升级后绑定前台传过来的list模型使用自定义绑定会死循环

2019-01-02 20:25发布

action:

model:

自定义验证:

现在BindModelAsync这个方法在2.2版本死循环.2.1中不会
有大神知道怎么回事吗 不胜感激

3条回答
看风景的人
2楼-- · 2019-01-02 21:02

你确定 2.1 不会死循环?

先说解决方法:

  • 1
    POST数据的时候,带上索引:
Addresses[0].City = "city0"
Addresses[0].Street = "street0"
Addresses.index = "0"
Addresses[1].City = "city1"
Addresses[1].Street = "street1"
Addresses.index = "1"

这样既不会陷入无限循环(其实是有限:cry),也能按预期绑定数据。
你可以在前端页面表单里为每一组Address都加上一个隐藏域 index
简单快速,不过可能不是你想要的

  • 2
    你的 Address 类中的属性,不能全部都标记你的自定义 ModelBinder 。
    就是说,你可以增加一个属性,比如 Id ,这个 Id 不使用你的 Binder ,这样就可以避免陷入循环。

不过你 POST 的数据里必须要有一个 Addresses[n].Id ,否则啥也绑定不到。

  • 3
    应该有更正确的方法,以及造成这种情况的原因,我还在看,回头再说。
查看更多
梦该遗忘
3楼-- · 2019-01-02 21:14

可以试一试 拉姆达表达式

查看更多
谁念西风独自凉
4楼-- · 2019-01-02 21:18

建议参考 ASP.NET Core 2.2 帮助文档 Custom Model Binding in ASP.NET Core 修改你的代码

查看更多
登录 后发表回答