我一直在努力解决这个问题相当长的一段时间。针对类似的问题,我已经按照他们的建议做了,但都没有成功。
如标题所示,我的$.ajax
传递的数据没有被我的控制器接收。
var data = {
id: id,
app: app
};
$.ajax({
type: "POST",
url: "/Utility/FetchTransactionLog",
data: JSON.stringify(data),
contentType: "application/json;",
success: function (data) {
if (data) {
h.resultDiv.html(data);
}
else {
h.resultDiv.html("");
alert("No Log Found");
}
}
});
控制器:
//id and app receives null values
public ActionResult FetchTransactionLog(string id,string app) {
UtilityModels util = new UtilityModels(app);
List<ResultModel> result = util.FetchTransactionLog(id);
return View("LogResult", result);
}
Route in Global.asax:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Utility", action = "Index", id=UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"FetchLog",
"Utility/FetchTransactionLog/{id}/{app}",
new { controller = "Utility", action = "FetchTransactionLog", id = "", app = "" } // Parameter defaults
);
我做错了什么?
以下是Samich建议的作品:
$.ajax({
type: "POST",
url: "/Utility/FetchTransactionLog/" + id + "/" + app,
data: "{}",
contentType: "application/json;",
success: function (data) {
if (data) {
h.resultDiv.html(data);
}
else {
h.resultDiv.html("");
alert("No Log Found");
}
}
});
试着把你的id和app添加到你的url中,就像你在路由/Utility/FetchTransactionLog/{id}/{app}
可能是因为你的路由需要在查询字符串中找到值,但没有找到,所以路由注册提供的默认值
为什么做JSON ?对数据进行字符串化?你应该按原样传递对象,比如
data: data,
文档明确指出,如果传入一个对象,它将自动转换为字符串。通过传入字符串, 包含 JSON,您混淆了jQuery,它最终将垃圾数据传递给ASP(使用浏览器的开发人员工具来检查请求会立即使此明显)。 你的 我现在不能测试这个,但试着改变- 试试这个:data
不应该是一个JSON字符串,只是把它作为一个Javascript对象。jQuery会将其转换为POST参数,然后控制器就可以读取了。$.ajax({
type: "POST",
url: "/Utility/FetchTransactionLog",
data: data,
success: function (data) {
if (data) {
h.resultDiv.html(data);
}
else {
h.resultDiv.html("");
alert("No Log Found");
}
}
});
data: JSON.stringify(data),
data: data,
JSON.stringify
将以一种阻止jQuery正确发布的方式格式化您的数据。如果你传递的是一个普通的对象,那么一切都应该像预期的那样工作。 $.ajax({
type: "POST",
url: "/Utility/FetchTransactionLog",
data: { id: id, app: app },
contentType: "application/json;",
success: function (data) {
if (data) {
h.resultDiv.html(data);
}
else {
h.resultDiv.html("");
alert("No Log Found");
}
}
});