簡體   English   中英

ASP.Net JSON Web服務發布表格數據

[英]ASP.Net JSON Web Service Post Form Data

我有一個裝飾有System.Web.Script.Services.ScriptService()的ASP.NET Web服務,因此它可以返回json格式的數據。 這對我來說很有效,但是ASP.Net要求Web服務的參數必須在json中才能獲取json。

我正在使用jquery運行我的ajax調用,似乎沒有一種簡單的方法可以從form元素創建漂亮的 javascript對象。 我已經看過json2庫中的serialiseArray,但是它沒有將字段名稱編碼為對象中的屬性名稱。

如果您有2個這樣的表單元素

 <input type="text" name="namefirst" id="namefirst" value="John"/>
 <input type="text" name="namelast" id="namelast" value="Doe"/>

調用$(“ form”)。serialize()將為您提供標准查詢字符串

namefirst=John&namelast=Doe

調用JSON.stringify($(“ form”)。serializeArray())會得到(笨重的)json表示形式

[{"name":"namefirst","value":"John"},{"name":"namelast","value":"Doe"}]

當傳遞給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

您還必須將json文本包裝在另一個名為nvp的對象中,以使Web服務滿意。 然后,當您需要關聯數組時,它所要做的工作更多,因為只有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"}

然后在服務器上使用類似Web的方法,將查詢字符串解析為關聯數組。

<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 /腳本服務的公認方法?

您正面臨格式危機。

正確調用此代碼:

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字符串:

'{"nvp": {"name": "john", "value": "foo"}}'

不要使用jQuery序列化ScriptService參數。 使用標准的json2.js

試試這個:表格

...
 <input type="text" name="name" id="name" value="John"/>
 <input type="text" name="value" id="value" value="Foo"/>
...

腳本:

var myNvp = {name: $('#name').val(), value:$('#value').val()};
var data = JSON.stringify({nvp: myNvp});
// data is what you post to the service.

我只是在腦海中寫下了這個,但對我來說看起來不錯。

如果您還有其他問題,請告訴我。

我沒有發現比將序列化字符串作為參數傳遞給我的想法更好的東西。

輸入:

  {"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

這似乎是最干凈,最簡單的選擇

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM