Как перебрать переменные POST, отправленные в ASP.NET WebMethod из метода JQuery $ .ajax? - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть контрольный список, созданный с помощью кнопок HTML, которые переключаются между выбранными и невыбранными классами при нажатии.Каждый параметр имеет связанный с ним идентификатор, а также необязательный ввод комментариев.

Я пытаюсь использовать метод JQuery $ .ajax () с POST для отправки идентификаторов выбранных кнопок и соответствующего комментария.Идея, которую я имею, состоит в том, чтобы создать коллекцию ключей / значений выбранных идентификаторов и их соответствующих комментариев, когда нажата кнопка «Сохранить» следующим образом:

selections = "{id1: 'comment1', id2: 'comment2', ...}"

Затем передайте ее части данных в $ .ajax() метод, подобный следующему:

$.ajax({
     type: "POST",
     url: "MyPage.aspx/MyMethod"
     data: selections,
     contentType: "application/json; charset=utf-8",
     dataType: "json",
     success: function(msg) {
       onSuccess(msg);
     }
});

И, наконец, доступ к выборкам в MyMethod путем циклического перебора HttpContext.Current.Request.Form.

Но когда я пытаюсь это сделать, HttpContext.Current.Request.Form всегда пуст.Мой подход неверен?Если так, то почему?Кто-нибудь может предложить другой подход?

Любая помощь будет принята с благодарностью.Заранее спасибо!

Кроме того, мне известны 4 способа вызова серверного метода из JQuery AJAX API:

  1. Page Method (статический метод на странице .aspx с [WebMethod] модификатор)
  2. Оператор переключения между методами в Page_Load страницы .aspx
  3. Оператор переключения между методами в ProcessRequest страницы .ashx
  4. Веб-служба

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

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Переменная selections должна быть объектом, а не строкой.

var selections = { id1: 'a', id2: 'b' };
0 голосов
/ 02 сентября 2011

Во-первых, убедитесь, что ваша переменная выбора является допустимым JSON, то, что вы написали в своем вопросе, не является допустимым обозначением JSON.

Во-вторых, в вашем определении веб-метода MyMethod получает строку в качестве параметра; Допустим, вы объявите это как

[WebMethod]
public MyMethod(string selections)
{
    //Do processing here
}

В теле вашего метода. Десериализуйте строку в Dictionary<string,string>, используя JavascriptSerializer, например:

JavascriptSerializer js = new JavascriptSerializer(); 
Dictionary<string,string> result = js.Deserialize<Dictionary<string,string>>(selections);

Теперь вы можете перебирать элементы в своем словаре.

Просто чтобы уточнить, ваша переменная выборок должна иметь каждое свойство, заключенное в кавычки; в вашем случае id1, id2 ... должны быть 'id1': 'comment', 'id2': 'comment' и т. д.

EDIT

Добавление кода, демонстрирующего, как должен вызываться веб-сервис.

var selections = "{'id1': 'comment1', 'id2': 'comment2'}";

$.ajax({
     type: "POST",
     url: "MyPage.aspx/MyMethod"
     data: JSON.stringify(selections),
     contentType: "application/json; charset=utf-8",
     dataType: "json",
     success: function(msg) {
       onSuccess(msg);
     }
});

В качестве последнего совета, ознакомьтесь с jsFiddle, он позволяет быстро тестировать вещи. См. Например .

...