如何通过AJAX向ASP.Net PageMethod同时传递JSON数组与对象
解决方案
要让你的PageMethod同时接收userModel[]数组和companyModel对象,只需要调整前端AJAX请求发送的JSON数据结构,使其包含与后端参数名完全匹配的键值对即可,具体修改如下:
1. 修改前端JavaScript代码
你需要在构造的请求数据对象中,同时加入users数组和company对象,确保它们的键名与后端WebMethod的参数名完全对应(大小写建议保持一致,避免模型绑定出现问题):
function TestJSON() { // 构造包含两个参数的请求对象 var requestData = { users: [], company: {} }; // 填充users数组 var user; for (var i = 0; i < 3; i++) { user = { userid: i.toString(), Name: "User" + i.toString() } requestData.users.push(user); } // 填充company对象 requestData.company = {companyid: "4", Name:"TEST COMPANY"}; $.ajax({ url: "bulkconsignments.aspx/TestJsonMethod", type: "POST", contentType: "application/json; charset=utf-8", // 必须设置此类型,确保ASP.NET正确解析JSON data: JSON.stringify(requestData), // 序列化包含两个参数的对象 async: false, cache: false, success: function (msg) { alert(msg.d); }, // 可选:添加错误处理,方便调试 error: function(xhr, status, error) { console.error('请求出错:', error); alert('请求失败,请查看控制台日志'); } }); }
2. 确认后端代码(无需修改)
你已经正确修改了WebMethod的参数定义,只要参数名users和company与前端发送的JSON键名对应,ASP.NET的模型绑定会自动将JSON数据映射到对应的类实例:
public class userModel { public string userid { get; set; } public string Name { get; set; } } public class companyModel { public string companyid { get; set; } public string Name { get; set; } } [WebMethod] public static string TestJsonMethod(userModel[] users, companyModel company) { // 在这里可以正常使用users数组和company对象 return "接收成功"; }
关键注意事项
- Content-Type必须正确:一定要设置
contentType: "application/json; charset=utf-8",否则ASP.NET会将请求数据视为表单数据,无法正确解析为JSON对象。 - 参数名严格匹配:前端JSON的键名要和后端WebMethod的参数名完全一致(比如后端是
users,前端不能写成userList),模型绑定才能正确映射。 - 对象结构一致:前端构造的
user和company对象的属性名,要和后端类的属性名对应(比如userid、Name),确保数据能正确填充到类实例中。
内容的提问来源于stack exchange,提问作者Muhammad Rabi Bin Mazhar
相关产品推荐
相关产品推荐

