Ajax调用C#方法始终接收null值问题求助
解决Ajax向C#方法传值为null的问题
问题原因
你当前Ajax发送的是JSON对象({ 'userId': jobId }),但后端方法期望接收单个字符串,ASP.NET MVC无法将JSON对象直接映射到单个string参数,导致jsonData始终为null。
解决方案一:直接传递字符串值
修改Ajax的data部分,直接序列化字符串本身,而非对象:
function select(jobId){ console.log(jobId); $.ajax({ url: '@Url.Action("SelectJob", "Home")', type: 'post', dataType: 'json', contentType: 'application/json', data: JSON.stringify(jobId), // 直接序列化jobId字符串 success: function (response) { console.log("yes", response.message); }, error: function () { console.log("no"); } }); }
后端方法保持不变:
[HttpPost] public ActionResult SelectJob([FromBody] string jsonData) { return Json(new { success = true, message = jsonData }); }
解决方案二:使用模型类接收(推荐)
如果后续可能传递更多参数,建议创建对应模型类,更符合MVC的参数绑定规范:
- 定义模型类:
public class JobRequestModel { public string UserId { get; set; } }
- 修改后端方法:
[HttpPost] public ActionResult SelectJob([FromBody] JobRequestModel model) { // 直接使用model.UserId获取传值 return Json(new { success = true, message = model.UserId }); }
- Ajax代码保持原有写法即可(发送的JSON对象与模型结构匹配):
function select(jobId){ console.log(jobId); $.ajax({ url: '@Url.Action("SelectJob", "Home")', type: 'post', dataType: 'json', contentType: 'application/json', data: JSON.stringify({ 'userId': jobId }), success: function (response) { console.log("yes", response.message); }, error: function () { console.log("no"); } }); }
额外说明
- 当设置
contentType: 'application/json'时,必须确保发送的是合法JSON格式,后端才能正确解析。 [FromBody]属性用于告诉MVC从请求体中读取数据,和你设置的contentType匹配,无需修改为[FromForm]。
内容的提问来源于stack exchange,提问作者Mattia Demontis
相关产品推荐
相关产品推荐

