C# MVC控制器无法正确解析POST请求中的JSON数据
问题:下拉列表关联数据POST到控制器后无法解析为非null值
我正在实现网站管理员可修改下拉列表的功能,下拉选项及关联数据以IDropDownEntity存储(例如JobPriority包含Name和PriorityColor,Branch包含Name和AddressValueObject类型的Address等)。视图表单可正常工作,但将数据以JSON格式POST到控制器时,关联数据值始终无法解析,一直为null。
实现的ViewModel结构
我通过反射和自定义属性从IDropDownEntity中筛选出用户可编辑属性,封装到以下ViewModel中:
public class DropDownEditViewModel { //constructor() public int Id { get; set; } public string Name { get; set; } public List<DDLEntityEditableProperty> EditableProperties { get; set; } = new(); } public class DDLEntityEditableProperty { //constructor() public string Name { get; set; } public object? Value { get; set; } }
前端请求数据与代码
视图中为Name和EditableProperties生成了输入框,通过JQuery发送JSON到控制器,但控制器接收的模型里Value始终为null:
生成的formData JSON示例
{ "Id": "1", "Name": "Home Office", "ExtraFields": [ { "Name": "PhoneNumber", "Value": "111-555-0000" }, { "Name": "Address", "Value": { "Address1": "404 Parse Street", "Locality": "Notfound", "PostCode": "00404" } } ] }
JQuery POST代码
$.post("/DropDowns/EditGenericDropDownEntity", formData, function (result, status) { ShowNotification(result.success, result.message); });
控制器接收方法
[HttpPost] public async Task<IActionResult> EditGenericDropDownEntity(DropDownEditViewModel model) { //model的Value始终为null if (!ModelState.IsValid) return Json(new {success = false, text = ModelState.GetError()}); else return Ok(); }
已尝试的解决方案
- 将
List<DDLEntityEditableProperty>替换为Dictionary<string, object?>,问题依旧(键能正常获取,但值仍为null) - 尝试将JSON作为字符串发送,再用Newtonsoft手动解析,未成功
请问还有哪些解决方法?反射是否不适用于此场景?
内容的提问来源于stack exchange,提问作者MediocreFantasy
相关产品推荐
相关产品推荐

