AJAX传递字符串至MVC控制器时参数为null问题求助
解决AJAX传参到MVC控制器为null及控制台日志问题
嘿,刚接触AJAX和MVC碰到这种问题太正常了,我来帮你一步步搞定!
一、核心问题:控制器接收参数yarp为null
你的AJAX请求里对参数做了多余的JSON序列化,导致MVC的模型绑定无法正确解析。具体调整如下:
错误原因
GET请求的参数是普通键值对字符串,不需要用JSON.stringify()包裹——你现在传递的是带双引号的字符串(比如"SEC-1000"),而控制器期望接收的是纯字符串SEC-1000,模型绑定匹配失败,所以参数为null。
修改后的AJAX代码
$('.tablecontainer').on('click', 'a.safeLink', function (e) { e.preventDefault(); var yarp = $(this).attr('safesel'); // 删掉没用的selectedSafeZZ变量 $.ajax({ url: '/Home/GetSafeItems', // 直接传递原始字符串,不要JSON序列化 data: { yarp: yarp }, type: "GET", success: function (data) { alert(yarp); // 修复控制台日志显示问题 console.log("We WIN", data); // 或者转成字符串查看:console.log("We WIN " + JSON.stringify(data)); }, error: function (xhr) { alert("Boohooo"); } }); })
额外验证步骤
你可以打开浏览器开发者工具(F12)的Network标签,点击链接后查看请求的URL:正常情况下应该是/Home/GetSafeItems?yarp=SEC-1000,确认参数已经拼接到URL中。
二、控制台显示"We WIN [Object object]"的问题
success回调里的data是控制器返回的JSON对象,直接用+和字符串拼接时,JS会把对象默认转为[Object object]。解决方法有两种:
- 用逗号分隔输出,直接查看对象结构:
console.log("We WIN", data); - 把对象转为JSON字符串:
console.log("We WIN " + JSON.stringify(data));
三、控制器代码的小优化(可选)
你的控制器代码本身没问题,不过在新版本MVC中,JsonRequestBehavior.AllowGet可以省略,因为默认允许GET请求返回JSON:
[Authorize] [HttpGet] public ActionResult GetSafeItems(string yarp) { using (CBREntities2 dc = new CBREntities2()) { ViewBag.safeselected = yarp; // 这里不管yarp是否为null都可以赋值,不用判断 var safeItem = dc.Items.Where(a => a.Safe_ID == yarp) .Select(s => new { Serial_Number = s.Serial_Number, Safe_ID = s.Safe_ID, Date_of_Entry = s.Date_of_Entry, Title_subject = s.Title_subject, Document_Type = s.Document_Type, Sender_of_Originator = s.Sender_of_Originator, Reference_Number = s.Reference_Number, Protective_Marking = s.Protective_Marking, Number_recieved_produced = s.Number_recieved_produced, copy_number = s.copy_number, Status = s.Status, Same_day_Loan = s.Same_day_Loan }).ToList(); return Json(new { data = safeItem }); } }
内容的提问来源于stack exchange,提问作者Wraithrider
相关产品推荐
相关产品推荐

