Вызовите C # серверную часть из Javascript с передачей параметров - PullRequest
0 голосов
/ 08 января 2019

Я знаю, что этот вопрос задавался ранее, но до сих пор ничто не помогло мне найти окончательное решение.

У меня есть веб-страница ASP с множеством кнопок, которые выполняют различные функции. У меня также есть выпадающий список, который содержит список объектов. Когда я выбираю элемент из раскрывающегося списка, функциональность кнопки остается неизменной в каждой кнопке, однако мне хотелось бы, чтобы в моем коде C # на сервере была вызвана функция, которая получает пару ключевых переменных, которые затем я могу передать в API. Если можно передать только один параметр, я мог бы передать его в виде строки JSON, так что это не ограничение, с которым должны быть связаны любые возможные решения.

У меня проблемы с определением наилучшего способа сделать это. Я читал некоторые возможности в таких вещах, как использование вызовов AJAX, атрибут OnCommand внутри кнопки asp, WebMethods и некоторые другие более неясные возможности. Я хотел бы избежать подхода скрытого поля, поскольку он кажется довольно хакерским. При этом я готов изменить свои мысли, если люди действительно думают, что это лучший способ.

Соответствующие части моего кода следующие:

Javascript код

function testAJAX()
{
    //The console.log was called successfully, however the ProcessData function was never hit correctly
    /*console.log("hello");     
    PageMethods.ProcessData("Hello", successAjax, failAjax);*/

    $.ajax({ 
        type: "POST", 
        url: "UserManagement.aspx/ProcessData", 
        data: '{data:"Hello"}', // passing the parameter 
        contentType: "application/x-www-form-urlencoded; charset=utf-8", 
        dataType: "text", 
        success: function(retValue) {
            // Do something with the return value from.Net method
            alert(retValue);
            } 
        }); 
}

function successAjax(response) {
    alert(response.get_message());
}

function failAjax(response) {
    alert(response.get_message());
}

Код C # (была предпринята попытка отладки данных + = "с сервера";)

[WebMethod(EnableSession = true)]
public static string ProcessData(string data)
{
    data += " from the server";
    return data;
}

Вызов Javascript кода

<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" runat="server" />
    <button onclick="testAJAX()">Test AJAX</button>
</form>

Насколько я могу судить, я просто не могу получить ЛЮБЫЕ вызовы Ajax или Web Method, попадающие на мою точку останова в коде на стороне сервера. Я пробовал:

  • Копирование AJAX из верхнего ответа в this и изменение переменных так, чтобы оно указывало на мою функцию (url: "UserManagement.aspx / ProcessData",)
  • Перемещение моего тега сценария в тег body
  • Добавление ScriptManager в мою форму
  • Удостоверился, что я не использовал мастер-страницу, так как очевидно, что это что-то меняет
  • Использование PageMethods.ProcessData (). Похоже, это ближе всего, так как на самом деле она попала в функцию успеха, но, похоже, не попала в мою функцию ProcessData ...

Я действительно в растерянности, почему он не отлаживает на сервере, если у кого-нибудь есть какие-либо предложения, это было бы замечательно. Я предполагаю, что упускаю что-то маленькое, но этого, кажется, вполне достаточно, чтобы остановить прогресс. Как только я смогу отладить, мне надо идти. Спасибо всем заранее.

1 Ответ

0 голосов
/ 08 января 2019

вы не правильно передаете свои данные

// data:"{data:Hello}", its not correct 

удали и сделай вот так

data: { data: Hello },   

и вы можете передать переменную Hello следующим образом:

var Hello = "test";
        $.ajax({
            type: "POST",
            url: 'UserManagement.aspx/ProcessData',
            data: { data: Hello },               
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                console.log(data);
            },
            failure: function (response) {
                alert(response.d);
            }
        });
...