模型Binder有时在List <object>上为null

时间:2017-10-03 19:53:24

标签: c# asp.net-core model-binding

我有一个视图模型,视图模型的一个属性是一个名为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())中尝试了类似下面的内容,当然,即使列表在视图模型中为null,我的所有值都存在于Request对象中。

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();
}

1 个答案:

答案 0 :(得分:1)

我无法找到解决此问题的编码解决方案,并开始探索其他途径。我已经修复了这个问题,但它没什么意义。

我将项目从.net核心1.0.1升级到.net核心1.0.5,一切都在100%的时间都在运行。在这次升级中,我没有进行任何代码更改。刚刚升级的.net核心。很奇怪..