繁体   English   中英

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

[英]ModelState error: The value 'null' is not valid for nullable field

ModelState 抛出错误,因为可空字段为 null。

我有一个 model:

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

}

Controller:

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。当我开始调试时,我看到了这个错误

为什么ModelState会捕获错误? OrganizationId显然是一个可为nullable的字段。 我在 stackoverflow 上看到了主题,但无法使用该解决方案,因为这里没有Global.asax in .net core

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

您可以通过调用ModelState.Clear(); . 然后在代码中手动添加您需要的任何验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM