У меня есть веб-сервис ASP.NET, украшенный System.Web.Script.Services.ScriptService(), чтобы он мог возвращать форматированные данные json. Это много работает для меня, но у ASP.Net есть требование, чтобы параметры веб-службы должны быть в json, чтобы получить json.ASP.Net JSON Web Service Post Form Data
Я использую jquery для запуска своих вызовов ajax, и, похоже, не существует простого способа создать объект javascript из элементов формы. Я просмотрел serialiseArray в библиотеке json2, но он не кодирует имена полей в качестве имени свойства в объекте.
Если у вас есть 2 элементов формы, как этот
<input type="text" name="namefirst" id="namefirst" value="John"/>
<input type="text" name="namelast" id="namelast" value="Doe"/>
вызывающего $ ("форма"). Сериализации() получит вам стандартную строку запроса
namefirst=John&namelast=Doe
призывающей JSON. stringify ($ ("form"). serializeArray()) предоставит вам (объемное) json-представление
[{"name":"namefirst","value":"John"},{"name":"namelast","value":"Doe"}]
Это будет работать при переходе на веб-службы, но его уродливой, как вы должны иметь такой код, чтобы прочитать его в:
Public Class NameValuePair
Public name As String
Public value As String
End Class
<WebMethod()> _
Public Function GetQuote(ByVal nvp As NameValuePair()) As String
End Function
Вы также должны обернуть этот JSon текст внутри другого объекта nameed невирапина сделайте веб-сервис счастливым. Тогда его больше работает как все, что у вас есть, это массив NameValuePair, когда вам нужен ассоциативный массив.
я мог бы быть, шутите себя, но я представлял себе что-то более изящное, когда я начал этот проект - более как этот
Public Class Person
Public namefirst As String
Public namelast As String
End Class
, который потребует JSON выглядеть примерно так:
{"namefirst":"John","namelast":"Doe"}
Is есть простой способ сделать это? Очевидно, что это просто для формы с двумя параметрами, но когда у вас очень большая конкатенация строк, становится уродливой. Вложенные объекты также усложнят вещи
В тот момент, на котором я остановился, используется стандартный формат пары значений имени, заполненный внутри объекта json. Это компактный и быстрый
{"q":"namefirst=John&namelast=Doe"}
то есть веб-метод, как это на сервере, который анализирует строку запроса в качестве ассоциированного массива.
<WebMethod()> _
Public Function AjaxForm(ByVal q As String) as string
Dim params As NameValueCollection = HttpUtility.ParseQueryString(q)
'do stuff
return "Hello"
End Sub
Как далеко cludges идти это, кажется, достаточно элегантный с точки зрения количества кода, но мой вопрос: есть ли лучший способ? Существует ли общепринятый способ передачи данных формы в службы asp.net web/script?
спасибо за ваш ответ - я сказать, что это нужно будет завернуть с объектом «nvp», я, вероятно, должен был поместить его в блок кода. –
То, что я пытаюсь избежать, это строка: var myNvp = {name: $ ('# name'). Val(), value: $ ('# value'). Val()}; Представьте это с 30 элементами формы, он становится уродливым быстро, особенно с точки зрения обслуживания. Вы должны поддерживать как элементы ввода формы, так и javascript, который делает объект, который чисто там для помощника при вызове веб-службы, не добавляет никакого значения. Добавление новых элементов управления вводами больше связано с отсутствием прямой ссылки между формой и пост-данными, вы должны вручную создать объект javascript, который, по моему мнению, является более крупным, чем тот, который я начал с –
@Will - используйте данные плагин. Есть несколько, которые будут читать вашу форму в любой форме JSOB, которая вам нравится. Суть в том, что есть правильный путь и неправильный способ делать то, что вы пытаетесь сделать. Один способ работает, а другой нет. Выбор ваш. ;-) –