我有一个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