AJAX请求参数无法传递至MVC控制器,参数值为null求排查
问题分析与解决方案
你的from参数始终为null,主要是两个核心问题导致的,咱们一步步拆解:
1. GET请求的传参方式错误
你用JSON.stringify(req)把请求数据转成了JSON字符串传给data,但GET请求的参数是通过URL查询字符串传递的——jQuery会自动把data里的对象拼接成?key=value的格式,但你传的是一个完整的JSON字符串,后端的[FromUri]属性无法从这个字符串里解析出from字段,自然就拿到null了。
修正后的AJAX代码:
function ImportBundle() { var req = { "from": "bundle" }; $.ajax({ async: true, type: "GET", url: "Client/ZWS/{lang}/ImportBundles", // 移除contentType,GET请求不需要这个请求头(它是给POST请求体用的) data: req, // 直接传对象,无需JSON.stringify dataType: 'html', success: function (data) { $(".viewdiv").html(data); }, error: function () { // 注意拼写错误:是error不是failuere alert("fail"); } }); }
2. 控制器参数绑定的可选优化
其实对于GET请求,[FromUri]属性是可以省略的——ASP.NET MVC默认会自动从URL查询字符串里绑定参数,所以你的控制器代码可以简化成:
[System.Web.Http.HttpGet] public ActionResult ImportBundles(string from) { return PartialView("~/Views/_ViewImportBundles.cshtml"); }
另外别忘了修正AJAX里的错误回调拼写:把failuere改成error,否则请求失败时不会触发你写的alert逻辑哦。
内容的提问来源于stack exchange,提问作者Srijani Ghosh
相关产品推荐
相关产品推荐

