Как получить отдельные параметры из списка динамических параметров в веб-методе, отправленных с помощью метода jquery ajax? - PullRequest
3 голосов
/ 12 мая 2010

Я использую jquery ajax метод на моей странице aspx, который будет вызывать webmethod в коде позади. В настоящее время webmethod принимает несколько параметров, таких как имя, фамилия, адрес и т. Д., Которые я передаю из jquery ajax, используя

data:JSON.stringify({fname:firstname,lname:lastname,city:city})

теперь мое требование было изменено так, что число и тип передаваемых параметров не фиксирован для комбинации ex.parameter может быть чем-то вроде fname, city или fname, city или city, lname или fname, lname, city или что-то еще. Так что веб-метод должен быть таким, чтобы он принимал любые числовые параметры. Я подумал об использовании массивов для этого, как описано здесь .

Но я не понимаю, как я могу определить, какие и сколько параметров были переданы в веб-метод для вставки / обновления данных в БД. Пожалуйста, кто-нибудь может мне помочь с этим?

спасибо

Ответы [ 4 ]

1 голос
/ 19 мая 2010

Вы можете использовать сложный тип на стороне клиента, который соответствует объекту на стороне сервера, который содержит массив или несколько массивов ваших параметров.

Очень грубый пример

(на стороне сервера)

//class declaration     
public class MyObject
{
      //values
      string[] Keys;
      string[] Values;

      //methods
      public void Add()
      {...} 
}

//web service - WebService.asmx
[WebMethod]
public void AddObject(MyObject NewObject)
{
     NewObject.Keys.Length = ...;
     NewObject.Add();
     ...
}

(на стороне клиента)

var MyObject= { };

MyObject.Keys = { $("#key1").val(), $("#key2").val(), ... };
MyObject.Values = { $("#val1").val(), $("#val2").val(), ... };

var DTO = { 'MyObject' : MyObject};

$.ajax({
   type: "POST",
   contentType: "application/json; charset=utf-8",
   url: "WebService.asmx/AddObject",
   data: JSON.stringify(DTO),
   dataType: "json"
});

Приведенный выше пример сериализует ваш объект на стороне клиента, и вы сможете получить доступ к объекту на стороне сервера так же, как если бы вы создали его с помощью new ().

0 голосов
/ 12 мая 2010

Вы бы просто добавили параметры к вашему объекту, в зависимости от их доступности / наличия:

var params = {};
if(city != null) {
    params.city = city;
}
params.fname = $("#fname").val();
...etc...

$.ajax({
    ...
    data:JSON.stringify(params);
    ...
});
0 голосов
/ 18 мая 2010

Я бы передал webmethod строку в определенном формате (возможно, в формате вашего первого примера)

Таким образом, когда вы получаете запрос на сервере, вы сначала разделяете его на «,», чтобы получить массив пар имя-значение, а затем разделяете каждую пару, чтобы получить отдельные части имени и значения.

Обеспечивает простоту вызова, и вы можете обрабатывать его с помощью сложного кода на сервере с помощью пушистых .Net Framework intellisense, чтобы помочь вам.

KISS = Сохраняй это простым, глупый

Мой старый учитель музыки жил этим, я только недавно понял, почему !!!!

0 голосов
/ 12 мая 2010

Вы можете вернуть один строковый параметр JSON и проанализировать его на сервере в вашем веб-методе.

Это всего лишь один подход. Другой может быть посмотреть на ваш общий дизайн и подумать о том, как вы можете улучшить его, чтобы вам не приходилось передавать переменные параметры. они могут быть противными, как вы уже нашли. Часто откат и рефакторинг могут привести к более простому и элегантному дизайну, который намного проще программировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...