我一直在努力解决这个问题。我已经按照类似问题提供的所有建议但没有成功。
正如标题所说,我的$.ajax
传递的数据未被我的控制器接收。
jQuery的:
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);
}
在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");
}
}
});
答案 0 :(得分:2)
尝试将您的ID和应用附加到您在网址/Utility/FetchTransactionLog/{id}/{app}
可能是因为您的路由需要查询字符串中的值而在那里找不到它,所以路由注册提供的默认值
答案 1 :(得分:1)
为什么要对您的数据进行JSON.stringify?您应该按原样传递对象,例如
data: data,
documentation表示,如果你传入一个对象,它将自动转换为一个字符串。通过传入包含 JSON的字符串,您会混淆jQuery并最终将垃圾数据传递给ASP(使用浏览器的开发人员工具来检查请求会立即进行这很明显)。
答案 2 :(得分:1)
您的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");
}
}
});
答案 3 :(得分:0)
我现在无法测试,但尝试更改 -
data: JSON.stringify(data),
到
data: data,
JSON.stringify
将以阻止jQuery正确发布数据的方式格式化您的数据。如果你传递一个普通的对象,一切都应该按预期工作。
答案 4 :(得分:0)
试试这个:
$.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");
}
}
});