AJAX调用MVC Action时object类型id参数接收异常的解决方法
参数绑定异常:Action方法中id参数无法解析为int类型的解决办法
问题场景
后端Action方法定义:
public JsonResult DeleteRecord(string tableName, string fieldName, object id, string configs, string extenderName = null){}
前端AJAX调用代码:
var jqxhr = $.ajax({ type: "get", url: "/Dynamic/DeleteRecord?tableName=" + tableName + "&id=" + id + "&fieldName=" + colName + "&extenderName=" + extndname }) .done(function(data) { //console.log(data); if (data.Success == true) { } else { } }) .fail(function(XMLHttpRequest, textStatus, errorThrown) { }) .always(function() {});
问题:后端能接收其他所有参数,但id参数无法被解析为int类型,显示为{object}。
解决办法
1. 直接指定Action参数类型为int
既然id实际是整数类型,无需用object作为参数类型,直接改为int id:
public JsonResult DeleteRecord(string tableName, string fieldName, int id, string configs, string extenderName = null){}
ASP.NET模型绑定器会自动将URL中传递的数字字符串解析为int类型,无需额外处理。
2. 若必须保留object类型,手动转换参数
如果因业务需求必须保留object参数类型,可在Action内部手动转换为int:
public JsonResult DeleteRecord(string tableName, string fieldName, object id, string configs, string extenderName = null) { // 尝试将object转换为int if (int.TryParse(id.ToString(), out int intId)) { // 使用intId执行后续删除逻辑 } else { // 返回格式错误提示 return Json(new { Success = false, Message = "无效的ID格式" }); } }
3. 前端确保传递纯数字字符串
检查前端id变量类型,避免传递对象类型值。拼接URL前可强制转为字符串:
url: "/Dynamic/DeleteRecord?tableName=" + tableName + "&id=" + String(id) + "&fieldName=" + colName + "&extenderName=" + extndname
内容的提问来源于stack exchange,提问作者Faizan Naeem
相关产品推荐
相关产品推荐

