如何通过jQuery的AJAX GET方法传递ClientId获取数据?
解决jQuery AJAX GET请求传递参数到ASP.NET Core API的问题
看起来你遇到的核心问题是参数模型绑定失败,导致后端无法正确获取到你传递的clientId。我来帮你一步步解决:
问题分析
- 大小写不匹配:你的C#类
ClientDetails里的属性是ClientId(大写C开头),但AJAX里传递的参数是clientId(小写c开头)——C#是大小写敏感的,默认模型绑定会因为名称不匹配而无法赋值。 - GET请求的复杂类型参数绑定:对于GET请求,ASP.NET Core不会自动从查询字符串绑定复杂类型(比如你的
ClientDetails类),需要显式指定参数来源。
解决方案
方案1:调整参数名并添加[FromQuery]特性(推荐)
先修改后端的Action方法,给参数加上[FromQuery]特性,确保框架从查询字符串中读取参数;同时保持前后端参数名称一致:
[HttpGet] [Route("matter")] // 添加[FromQuery]告诉框架从URL查询字符串绑定ClientDetails对象 public List<MatterLookup> LookupValuesForMatter([FromQuery] ClientDetails data) { // 这里编写你的业务逻辑,比如根据data.ClientId查询数据 return yourDataService.GetMatterLookupByClientId(data.ClientId); } public class ClientDetails { public string ClientId { get; set; } }
然后修改前端AJAX代码,把参数名改成和后端一致的ClientId:
var clientId = $("#client").val(); // 参数名改为大写C开头的ClientId,和后端属性名匹配 var data = { ClientId: clientId }; $.ajax({ type: "GET", url: "matter", data: data, success: function (response) { // 这里可以处理返回的MatterLookup列表 console.log("成功获取项目详情:", response); // 示例:把数据渲染到下拉框 // $("#matterSelect").empty(); // response.forEach(item => { // $("#matterSelect").append(`<option value="${item.Id}">${item.Name}</option>`); // }); }, error: function(xhr, status, error) { // 别忘了处理错误情况 console.error("请求失败:", error); } });
方案2:用JsonPropertyName保持前端参数名不变
如果前端代码已经写好不想修改,可以在后端的属性上添加[JsonPropertyName]特性,指定前端传递的参数名:
using System.Text.Json.Serialization; public class ClientDetails { // 指定前端传递的参数名是clientId(小写c) [JsonPropertyName("clientId")] public string ClientId { get; set; } }
这种方式下,后端Action依然需要添加[FromQuery]特性,前端AJAX代码可以保持原样。
验证方式
发送请求后,你可以在浏览器的开发者工具中查看请求URL,应该会类似:/matter?ClientId=xxx(方案1)或/matter?clientId=xxx(方案2),后端就能正确获取到参数值了。
内容的提问来源于stack exchange,提问作者Arun D
相关产品推荐
相关产品推荐

