【问题标题】:Problem sending parameter to my controller using AJAX/JQuery in ASP.Net Core在 ASP.Net Core 中使用 AJAX/JQuery 向我的控制器发送参数时出现问题
【发布时间】:2020-04-01 17:09:25
【问题描述】:

对此的任何帮助将不胜感激。我的 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
    });

//带有Ajax的JQuery函数:

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
    }

【问题讨论】:

  • 试试这个url: 'https://localhost:44346/home/Download/'+loadId并删除数据

标签: jquery ajax asp.net-mvc asp.net-core devexpress


【解决方案1】:

尝试将您的 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 中设置断点来确认这一点 - 我很确定如果没有上述更改,当您单击按钮时不会触发断点。

【讨论】:

  • 非常感谢您的关注。不幸的是,我在更改后收到错误:“没有找到网址的网页:localhost:44346/Home/Download?HTTP ERROR 404”
  • 道歉 - 我原来的答案是错误的。我刚刚测试了上述内容,它应该适合你。
  • 再次感谢。这是一个令人头疼的问题。现在看起来井井有条,但我从我的控制器方法在我的控制台上获得了“从 UI:0 传递的加载 ID”,但我在 UI 上的通知中得到了正确的 loadId
  • 1.在上面的 jQuery $.ajax(...) 语句上设置断点并检查 loadId 的值 - 假设它是例如5 这里。查看开发人员工具的“网络”选项卡中的 HTTP 请求,并检查查询字符串上的 loadId 参数是否匹配,例如在我们的示例中为 5。
猜你喜欢
  • 2021-10-23
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
相关资源
最近更新 更多