Asp.net

使用 jQuery Ajax 將參數傳遞給 WebMethod

  • September 8, 2015

我有一個簡單的 web 方法和 ajax 呼叫,並繼續收到一個錯誤,說它不能將字元串轉換為 IDictionary 對象???

這是ajax呼叫:

var params = '{"ID":"' + rowid + '"}';
$.ajax({
 url: 'EDI.asmx/GetPartnerDetails',
 type: "POST",
 contentType: "application/json; charset=utf-8",
 data: JSON.stringify(params),
 dataType: "json", //not json . let me try to parse
 success: function(msg, st) { . . . .

這是網路方法:

<WebMethod()> _
Public Function GetPartnerDetails(ByVal ID As String) As String

   'Dim objParam As IDictionary = CType(JsonConvert.DeserializeObject(ID), IDictionary)
   'Dim rowID As String = objParam("ID")

   Dim objController As New HealthComp.BLL.X12Partners.TradingPartnersController
   Dim objInfo As TradingPartnersInfo = objController.FetchByPartnerID(Int32.Parse(ID))

   Return JsonConvert.SerializeObject(objInfo)
End Function

這是我從 FireBug 看到的:

響應標頭

伺服器:Microsoft-IIS/5.1

日期:2009 年 4 月 9 日星期四 21:43:59 GMT

jsonerror:true

Cache-Control:private

Content-Type:application/json; charset=utf-8

內容長度:1331

POST: “{"ID":"4"}”

回复:

{“消息”:“無法將類型 \u0027System.String\u0027 的對象轉換為類型 \u0027System.Collections .Generic.IDictionary`2

$$ System.String,System.Object $$\u0027",“StackTrace”:" 在 System.Web.Script.Serialization .ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer 序列化程序, Boolean throwOnError, Object&convertedObject)\r\n 在 System.Web.Script.Serialization。 ObjectConverter.ConvertObjectToTypeMain(Object o,Type 類型,JavaScriptSerializer 序列化程序,Boolean throwOnError,Object& convertObject )\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object o, Type type, JavaScriptSerializer 序列化程序)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer 序列化程序,字元串輸入,類型類型,Int32 depthLimit)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer .Deserialize$$ T $$(字元串輸入)\r\n 在 System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext 上下文,JavaScriptSerializer 序列化程序)\r\n 在 System.Web.Script.Services.RestHandler .GetRawParams(WebServiceMethodData methodData,HttpContext 上下文) \r\n 在 System.Web.Script.Services .RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)",“ExceptionType” :“System.InvalidOperationException”} 有人對此有任何想法嗎?謝謝!!

快速項目:

你的變數 params var params = '{ID:' + rowid + '}'; 是一個字元串。

所以行: data: JSON.stringify(params),是多餘的(或者應該是)。剛設置data: params,

接下來,在您的 Web 方法中,將結果轉換為 JSON 字元串並將其作為字元串返回。如果您的 Web 方法類具有 ScriptMethod 屬性,則不需要這樣做。只需將數據作為本機類型返回,Asp.Net 就會為您轉換為 JSON。

您可能會閱讀以下文章: http ://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspnet-webmethod/

http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/

引用自:https://stackoverflow.com/questions/736058