c# – 模型Binder有时会在List上为null
作者:互联网
我有一个视图模型,视图模型的一个属性是一个名为Profile的对象. Profile的一个属性是另一个对象的列表,称为CD.从视图中,我将POST主体值设置为以下值
Profile.CD [0] .Prop1 = TEST&安培; Profile.CD [0] .Prop2 = TEST&安培; Profile.CD [1] .Prop1 = TEST2&安培; Profile.CD [1] .Prop2 = TEST2
如果我要在视图中的列表中添加第三个对象,它将作为Profile.CD [2] .Prop1 = TEST3发布,在控制器中,所有突然的Profile.CD都为空. 2项及以下Profile.CD获取我期望的值.一旦我添加第三项,模型活页夹就会停止工作.我的智慧结束了,我已经尝试了所有我能想到的东西.
我尝试过的事情
>从视图中删除项目,然后添加新项目 – WORKS
>从视图中删除两者,并添加2个新项目 – WORKS
>在视图中添加第三个项目 – 视图模型中的FAILS Profile.CD为空
我没有使用任何模型状态验证规则.在调试时,我在即时窗口中尝试过类似下面的内容吗?Request.Form.Where(x => x.Keys.Contain(“Profile.CD”)).ToList())当然,所有的我的值存在于Request对象中,即使视图模型中的列表为null.
Profile.CD中对象的值不必是唯一的.我已经尝试将每个值设置为“TEST”,只是为了验证它不是导致此问题的输入.
我真的迷路了……
查看模型
public class PortalViewModel {
public ProfileModel Profile { get; set; }
}
档案模型
public class ProfileModel {
//bunch of other static properties that are bound just fine.. like strings and decimals...
public List<CDModel> CD { get; set; }
}
调节器
public async Task<IActionResult> Edit (PortalViewModel Model)
{
Repo.UpdateProfile(Model.Profile); // in this method it foreachs Profile.CD , but sometimes this is null and other times it get's it's values....
return Ok();
}
解决方法:
我无法找到解决这个问题的编码解决方案,并开始探索其他途径.我已经解决了这个问题,但这没什么意义.
我将项目从.net核心1.0.1升级到.net核心1.0.5,一切都在100%的时间都在运行.在这次升级中,我没有进行任何代码更改.刚刚升级的.net核心.很奇怪..
标签:c,asp-net-core,model-binding 来源: https://codeday.me/bug/20190705/1390215.html