You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC控制器接收Ajax参数时myValue始终为null的问题

问题原因

你当前的问题是前端发送的JSON结构与后端控制器参数不匹配,导致模型绑定失败,myValue始终为null。前端发送的是包含对象的数组,而后端期望接收单个string类型参数,ASP.NET MVC无法自动完成这种类型转换。


解决方案

方案1:创建对应模型类接收数组(推荐)

这种方式符合规范,便于后续扩展:

  1. 后端定义与前端JSON结构匹配的模型类:
public class PropertyItem
{
    public string Name { get; set; }
    public string Value { get; set; }
}
  1. 修改控制器方法,添加[FromBody]特性确保从请求体绑定数据:
[HttpPost]
public async Task<ActionResult> Test([FromBody] List<PropertyItem> myValue)
{
    // myValue将正确接收前端发送的数组数据
    return Json("something");
}
  1. 前端代码保持不变即可,数组JSON与List<PropertyItem>结构完全匹配:
var props = [
    { "Name": "firstName", "Value": "firstValue" }, 
    { "Name": "secondName", "Value": "secondValue" }
];

$.ajax({
     url: '/myURL',
     contentType: "application/json",
     async: true,
     type: "POST",
     data: JSON.stringify(props),
     error: function (jqXHR, textStatus, errorThrown) {
         console.log("FAIL: " + errorThrown);
     },
     success: function (data, textStatus, jqXHR) {
         console.log("SUCCESS!");
     }
});

方案2:包装数组为对象属性,适配string参数(临时场景)

如果必须用string myValue接收,可调整前端数据结构:

  1. 前端将数组包装到myValue属性中:
data: JSON.stringify({ myValue: props })
  1. 后端控制器方法保持不变,MVC会自动解析对象中的myValue属性:
[HttpPost]
public async Task<ActionResult> Test(string myValue)
{
    // 可手动反序列化JSON字符串:
    // var props = JsonConvert.DeserializeObject<List<PropertyItem>>(myValue);
    return Json("something");
}

方案3:直接接收JSON字符串(特殊场景)

若需直接接收数组的JSON字符串,调整前后端如下:

  1. 前端将数组转成JSON字符串后再次序列化,确保发送纯字符串:
data: JSON.stringify(JSON.stringify(props))
  1. 后端添加[FromBody]特性接收字符串:
[HttpPost]
public async Task<ActionResult> Test([FromBody] string myValue)
{
    // myValue即为前端数组的JSON字符串
    return Json("something");
}

内容的提问来源于stack exchange,提问作者TheBoubou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:06:25