简体   繁体   中英

.Net Core 2.2 binding - model properties are null

The model I try my Json to bind to:

public class UserText
{
    public string Title { get; set; }
    public string Description { get; set; }
    public string Content { get; set; }
    public string MainImageStr { get; set; }
    public List<int> CategoriesIds { get; set; }
    public List<string> LocationStrList { get; set; }
}

public class AdminText : UserText
{
    
    public int Type { get; set; }
    public string KeyWords { get; set; }
    public string HomepageTitle { get; set; }
    public string HomepageDescription { get; set; }
    public string TitleAltOfImage { get; set; }
    public bool IsHomePageText { get; set; } = false;
    public int HomepageOrder { get; set; }
    public bool EnableComments { get; set; } = true;
    public bool IsMultiLanguage { get; set; } = false;
    public short LanguageType { get; set; }
    public int Status { get; set; }
}

JSON:

{
    "LocationStrList": "7_110",
    "CategoriesIds": "33",
    "TitleAltOfImage": "asdasdasdasdasdasdssss",
    "KeyWords": "asdasdasdasdasdasdssss",
    "EnableComments": "false",
    "Type": "2",
    "LanguageType": "1",
    "Status": "1",
    "IsHomePageText": "false",
    "HomepageTitle": "asdasdasdasdasdasdssss",
    "HomepageDescription": "asdasdasdasdasdasdssss",
    "HomepageOrder": "2",
    "IsMultiLanguage": "false"
}

Mvc Controller action signature:

public async Task<JsonResult> AddText(AdminText newText)

Every Property of the model is null, why is that?

CategoriesIds and LocationStrList fields are of type list, you need to pass the values for those two as arrays..

{
    "LocationStrList": ["7_110"],
    "CategoriesIds": ["33"],
    "TitleAltOfImage": "asdasdasdasdasdasdssss",
    "KeyWords": "asdasdasdasdasdasdssss",
    "EnableComments": "false",
    "Type": "2",
    "LanguageType": "1",
    "Status": "1",
    "IsHomePageText": "false",
    "HomepageTitle": "asdasdasdasdasdasdssss",
    "HomepageDescription": "asdasdasdasdasdasdssss",
    "HomepageOrder": "2",
    "IsMultiLanguage": "false"
}

The data type of your List,int,bool is string in your json.So you need to change the data type in json.And in mvc,if you want to pass json data to controller,you need to use [From Body].Here is a demo worked: Controller:

[HttpPost]
        public async Task<JsonResult> AddText([FromBody]AdminText newText) {
            return Json("ok");
        }

JsonData:

{"LocationStrList": ["7_110"],
    "CategoriesIds": [33],
    "TitleAltOfImage": "asdasdasdasdasdasdssss",
    "KeyWords": "asdasdasdasdasdasdssss",
    "EnableComments": false,
    "Type": 2,
    "LanguageType": 1,
    "Status": 1,
    "IsHomePageText": false,
    "HomepageTitle": "asdasdasdasdasdasdssss",
    "HomepageDescription": "asdasdasdasdasdasdssss",
    "HomepageOrder": 2,
    "IsMultiLanguage": false
}

result: 在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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