编程语言
首页 > 编程语言> > c# – 模型Binder有时会在List上为null

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