2010-04-28 7 views
0

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

Я думаю, что я буду использовать сериализацию jQuery() в форме для получения данных, но что у меня есть для веб-службы для параметра? Я думал, может быть, я мог бы использовать serializeArray(), но все же я не знаю, какой тип переменной принять для массива JavaScript.

Наконец, я думал, что мне может понадобиться создать простой объект передачи данных с данными перед отправкой его в веб-службу. Я просто не хотел проходить через маршрут DTO, если бы был намного более простой способ или установленная лучшая практика, за которой я должен следовать.

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

+0

Возможно, я неправильно понимаю вашу архитектуру, но это звучит так, как будто у вас есть полный контроль над формой ASP.Net, которая будет передавать входные значения в веб-службу. Если это так, зачем вам нужен отдельный веб-сервис? – MusiGenesis

+0

У меня есть обработка сервера, которая требуется как часть проверки ввода. Существуют специальные правила валидации, зависящие от деталей, помещенных в идентификатор элемента управления. – Billyhole

ответ

0

Ну, я пошел с созданием моего собственного объекта передачи данных, который, как я полагаю, всегда был фронтом мозгового решения, я просто думал, что, вероятно, была признана лучшая практика в том, как справиться с этим.

0

Ответ на вопрос заголовка (предполагая, что это веб-сервис ASP.Net) заключается в использовании params ключевое слово в вашем методе веб-службы:

[WebMethod] 
public void SendSomething(params string[] somethings) 
{ 
    foreach (string s in somethings) 
    { 
     // do whatever you're gonna do 
    } 
} 

Примеры:

SendSomething("whatever"); 
SendSomething("whatever 1", "whatever 2", "whatever 3"); 

В факту, вам даже не нужно ключевое слово params - использование обычного массива в качестве параметра позволит вам передать неизвестное количество значений.

+0

Мне нужен идентификатор элемента управления и значение как пара значений ключа, поэтому я пытаюсь передать строку JSON формы, используя var postData = $ ('# aspnetForm'). SerializeArray(); а затем $ .ajax ({data: JSON.stringify (postData)). И установка веб-службы для принятия строкового массива с ошибкой «Тип System.Collections.Generic.IDictionary'2 [[System.String, ... is not поддерживаемый для десериализации массива ». Поэтому я подумал, что мне, вероятно, нужен многомерный массив, и изменил параметр веб-службы на строку [,] и по-прежнему получил то же исключение. – Billyhole

+0

Правильно ли я предполагаю, что вы пытаетесь вызывать веб-сервис с клиентской страницы через AJAX? Является ли форма слишком большой, чтобы делать обычную обратную передачу? – MusiGenesis

+0

Вы правы. Я стараюсь не делать обратной передачи, поскольку это в основном более сложная проверка ввода, но пользователю , все еще только проверка ввода. – Billyhole

Смежные вопросы