我有一個ASP.NET Web服務裝飾System.Web.Script.Services.ScriptService()因此它可以返回json格式的數據。這對我很有幫助,但ASP.Net有一個要求,即爲了讓json得到JSON,Web服務的參數必須在json中。ASP.Net JSON Web服務後表單數據
我正在使用jquery來運行我的ajax調用,並且似乎沒有一種簡單的方法來創建漂亮的 JavaScript對象從窗體元素。我已經看過json2庫中的serialiseArray,但它不會將字段名稱編碼爲對象中的屬性名稱。
如果你有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"}]
0123傳遞到Web服務時,但它的醜陋,你必須有這樣的代碼讀取它
這將工作:
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
你也必須到另一個對象nameed NVP內部的JSON文本換行到使網絡服務開心。然後,當你想要一個關聯數組時,你所擁有的更多工作就是一個NameValuePair數組。
我可能是在開玩笑自己,但我想象中的東西更優雅,當我開始這個項目 - 更多像這樣的
Public Class Person
Public namefirst As String
Public namelast As String
End Class
這將需要JSON看起來是這樣的:
{"namefirst":"John","namelast":"Doe"}
是有一個簡單的方法來做到這一點?顯然,對於具有兩個參數的表單很簡單,但是當您有一個非常大的表單連接字符串會變得很難看。嵌套對象也會使事情變得複雜
我現在已經解決的問題是使用填充在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
儘管從代碼量來看,這個代碼看起來相當優雅,但我的問題是:還有更好的方法嗎?將表單數據傳遞給asp.net web /腳本服務是否有普遍接受的方式?
謝謝您的回答 - 我不提,那就需要用一個對象被包裹「nvp」,我可能應該把它放到代碼塊中。 – 2010-05-07 01:17:27
我想避免的是這行: var myNvp = {name:$('#name')。val(),value:$('#value')。val()}; 想象這與30個表單元素,特別是從維護的角度來看它很快變得醜陋。您必須同時維護表單輸入控件和生成該對象的JavaScript,純粹是爲了幫助調用web服務,它不會增加任何值。添加新的輸入控件涉及更多,因爲表單和發佈數據之間沒有* direct *鏈接,所以您必須手動創建javascript對象,我認爲這比我以 – 2010-05-07 01:18:03
開始的那個更合適@將使用數據插入。有幾個將您的表單讀入您喜歡的任何JSOB形狀。底線是,有一種正確的方式和一種錯誤的方式來做你想做的事情。一種方法有效,另一種則不行。這是你的選擇。 ;-) – 2010-05-07 01:31:24