在 ASP.Net Core 中使用 AJAX/JQuery 向我的控制器发送参数时出现问题
Problem sending parameter to my controller using AJAX/JQuery in ASP.Net Core
如有任何帮助,我们将不胜感激。我的 UI 上有一个数据网格和一个下载按钮。当用户在网格中选择一行并单击下载时,它应该将 int id 作为参数传递给我控制器上的 Download 方法,这会触发进一步的处理。
我已经尝试使用 Ajax/JQuery 来解决这个问题,但是我是个新手,我总是将 0 传递给控制器。它正确地选择了我的 ID,因为我有一个警报,每次选择都会显示正确的 ID。我在 Chrome 中检查时没有发现任何错误。
相关代码见下方:
//html
<form asp-controller="Home" asp-action="Download" method="get">
<div id="downloadButton"></div>
</form>
//JQuery 我认为数据网格:
$("#gridContainer2").dxDataGrid({
dataSource: DevExpress.data.AspNet.createStore({
loadUrl: url + "/GetLoadHistory",
key: "loadId"
}),
selection: {
mode: "single"
},
hoverStateEnabled: true,
paging: {
pageSize: 10
},
editing: {
mode: 'row',
},
onSelectionChanged: getLoadId
});
//JQuery 函数与 Ajax:
function getLoadId() {
var dataGrid = $("#gridContainer2").dxDataGrid("instance");
var loadId = dataGrid.getSelectedRowKeys();
console.log("Load ID: " + loadId);
download(loadId);
}
function download(loadId) {
$("#downloadButton").dxButton({
text: "Download Selected",
type: "normal",
icon: "/favicon.ico",
contentType: "application/json; charset=utf-8",
dataType: "json",
useSubmitBehavior: true,
onClick: function (e) {
$.ajax({
url: 'https://localhost:44346/home/Download/',
data: { LoadID: loadId}
}).done(function () {
DevExpress.ui.notify("Downloading results for Load ID: " + loadId, "info", 1500);
});
}
});
};
//家庭控制器上的下载方法:
[HttpGet]
public async Task<IActionResult> Download(int loadId)
{
//always 0...
Console.WriteLine("Load ID passed from UI:" + loadId);
//further processing
}
尝试将您的 jQuery.ajax
更改为以下内容:
$.ajax({
url: 'https://localhost:44346/home/Download/',
type: 'GET',
data: {
loadId: getLoadId()
}
}).done(function() {
DevExpress.ui.notify("Downloading results for Load ID: " + loadId, "info", 1500);
});
请注意,我已将您发送到服务器的数据中的 loadId
小写,并明确声明这是一个 HTTP GET 请求。
编辑:您根本没有调用 getLoadId
函数;这里重要的一行是 loadID: getLoadId()
。通过在浏览器开发人员工具中的 getLoadId
中设置断点来确认这一点 - 我很确定如果没有上述更改,当您单击按钮时不会命中断点。
如有任何帮助,我们将不胜感激。我的 UI 上有一个数据网格和一个下载按钮。当用户在网格中选择一行并单击下载时,它应该将 int id 作为参数传递给我控制器上的 Download 方法,这会触发进一步的处理。
我已经尝试使用 Ajax/JQuery 来解决这个问题,但是我是个新手,我总是将 0 传递给控制器。它正确地选择了我的 ID,因为我有一个警报,每次选择都会显示正确的 ID。我在 Chrome 中检查时没有发现任何错误。
相关代码见下方:
//html
<form asp-controller="Home" asp-action="Download" method="get">
<div id="downloadButton"></div>
</form>
//JQuery 我认为数据网格:
$("#gridContainer2").dxDataGrid({
dataSource: DevExpress.data.AspNet.createStore({
loadUrl: url + "/GetLoadHistory",
key: "loadId"
}),
selection: {
mode: "single"
},
hoverStateEnabled: true,
paging: {
pageSize: 10
},
editing: {
mode: 'row',
},
onSelectionChanged: getLoadId
});
//JQuery 函数与 Ajax:
function getLoadId() {
var dataGrid = $("#gridContainer2").dxDataGrid("instance");
var loadId = dataGrid.getSelectedRowKeys();
console.log("Load ID: " + loadId);
download(loadId);
}
function download(loadId) {
$("#downloadButton").dxButton({
text: "Download Selected",
type: "normal",
icon: "/favicon.ico",
contentType: "application/json; charset=utf-8",
dataType: "json",
useSubmitBehavior: true,
onClick: function (e) {
$.ajax({
url: 'https://localhost:44346/home/Download/',
data: { LoadID: loadId}
}).done(function () {
DevExpress.ui.notify("Downloading results for Load ID: " + loadId, "info", 1500);
});
}
});
};
//家庭控制器上的下载方法:
[HttpGet]
public async Task<IActionResult> Download(int loadId)
{
//always 0...
Console.WriteLine("Load ID passed from UI:" + loadId);
//further processing
}
尝试将您的 jQuery.ajax
更改为以下内容:
$.ajax({
url: 'https://localhost:44346/home/Download/',
type: 'GET',
data: {
loadId: getLoadId()
}
}).done(function() {
DevExpress.ui.notify("Downloading results for Load ID: " + loadId, "info", 1500);
});
请注意,我已将您发送到服务器的数据中的 loadId
小写,并明确声明这是一个 HTTP GET 请求。
编辑:您根本没有调用 getLoadId
函数;这里重要的一行是 loadID: getLoadId()
。通过在浏览器开发人员工具中的 getLoadId
中设置断点来确认这一点 - 我很确定如果没有上述更改,当您单击按钮时不会命中断点。