Ошибка отправки параметра на мой контроллер с использованием AJAX / JQuery в ASP. Net Core - PullRequest
0 голосов
/ 01 апреля 2020

Любая помощь с этим будет высоко ценится. У меня есть сетка данных и кнопка загрузки в моем интерфейсе. Когда пользователь выбирает строку в сетке и нажимает кнопку загрузки, он должен передать int id в качестве параметра моему методу загрузки на моем контроллере, что вызывает дальнейшую обработку.

Я пытался использовать Ajax / JQuery для этого, но, увы, я новичок и продолжаю получать 0, передаваемых контроллеру. Он правильно выбирает мой идентификатор, так как у меня есть предупреждение, которое отображает правильный идентификатор при каждом выборе. Я не получаю ошибок при осмотре в 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
    }

1 Ответ

1 голос
/ 01 апреля 2020

Попробуйте изменить 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 в инструментах разработчика вашего браузера - я уверен, что без вышеуказанного изменения точка останова не будет достигнута, когда вы нажмете кнопку.

...