ModelState错误:值“ null”对于可为空的字段无效

时间:2019-05-08 05:51:54

标签: c# asp.net-mvc asp.net-core

ModelState引发错误,因为可为空的字段为空。

我有一个模特:

public class PersonModel
{
    public int? ID { get; set; }

    [Required]
    [StringLength(256)]
    public string Title { get; set; }

    [Required]
    [StringLength(256)]
    public string Name { get; set; }

    [Required]
    [StringLength(256)]
    public string Lastname { get; set; }

    [StringLength(1024)]
    public string Description { get; set; }

    public int? OrganizationID { get; set; }

    public string Organization { get; set; }

}

控制器:

var errors = ModelState.Where (c => c.Value.Errors.Count > 0).Select (c => c.Value).ToList ();

if (!errors.Any ()) {
    Person entity;

    if (model.ID.HasValue && model.ID > 0) {
        if (!Session.HasClaim (DataCache.Claims.EditPerson))
            return BadRequest ();

        entity = Repository.GetPerson (model.ID.Value);
    } else {
        if (!Session.HasClaim (DataCache.Claims.AddPerson))
            return BadRequest ();

        entity = new Person ();
        Repository.AddPerson (entity);
        if (!model.OrganizationID.HasValue && !string.IsNullOrEmpty (model.Organization)) {
            var organization = new Organization () {
                Title = model.Organization
            };
            Repository.AddOrganization (organization);
            entity.Organization = organization;
        }
    }

    TypeMapper.MapPersonModelToEntity (model, entity);
    Repository.Save ();
}

'errors'变量等于1。开始调试时,我看到了this error

为什么ModelState捕获到错误? OrganizationId显然是nullable字段。 我在stackoverflow上看到Topic,但是由于Global.asax中没有.net core,所以无法使用该解决方案。

1 个答案:

答案 0 :(得分:2)

您的代码正在尝试在'null'字段nullable int中插入字符串数据OrganizationID。由于其余部分不在此处,请自己弄清楚OrganizationID字段的原因正在获取字符串'null'而不是null的值。这可能是parsing的原因。