Я знаю, что этот вопрос задавался ранее, но до сих пор ничто не помогло мне найти окончательное решение.
У меня есть веб-страница 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 ...
Я действительно в растерянности, почему он не отлаживает на сервере, если у кого-нибудь есть какие-либо предложения, это было бы замечательно. Я предполагаю, что упускаю что-то маленькое, но этого, кажется, вполне достаточно, чтобы остановить прогресс. Как только я смогу отладить, мне надо идти. Спасибо всем заранее.