2011-10-28 56 views
0

私のWebサービスに自分のAjaxデータを投稿すると、このエラーが発生します。私は何度も試してみましたが、jsonの文字列を返すようにコードを変更しましたが、毎回失敗します。私がやっていることは、私が投稿したデータを返信して動作することを知っているからです。私は答えを探しましたが、他の選択肢を試しましたが、ここで結果が得られないのはエラーです。無効なWebサービスコール、パラメータ u0027filters u0027の値がありません

{"メッセージ:"パラメータが不足しています:\ u0027filters \ u0027 "、" StackTrace ":" System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target、IDictionary 2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary 2パラメータ)\ System \ WebService.RestHandler.InvokeMethod rawParams)\ R \ nはSystem.Web.Script.Services.RestHandler.ExecuteWebServiceCall(のHttpContextコンテキスト、WebServiceMethodData methodData)」、 "ExceptionTypeで": "のSystem.InvalidOperationException"}

のjQuery:

data = [{'Name': 'Acer', 'Count': 1 }, {'Name': 'HP', 'Count': 2 }] 
function getProducts(json, pageIndex, pageSize) { 

    $.ajax({ 
     type: 'POST', 
     url: '/website2/WebServices/GetProducts.asmx/GetProductsAndFilters', 
     data: "{'data' : {'filters':" + JSON.stringify(json) + ", 'PageIndex' : " + pageIndex + ", 'PageSize' : " + pageSize + "}}", 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     success: function (responseText) { 
      //alert(responseText.d); 
      $('.console').html(responseText.d); 
     }, 
     error: function (xhr, status, error) { 
      //var msg = JSON.parse(xhr.responseText); 
      //alert(msg.Message); 
      $('.console').html(xhr.responseText) 
     } 
    }); 
} 
getProducts(data, "0", "2") 

C番号:

public class dvals 
{ 
    public string Name { get; set; } 
    public string Count { get; set; } 
} 

public class data 
{ 
    public List<dvals> Filters {get;set;} 
    public string PageIndex { get; set; } 
    public string PageSize { get; set; } 
} 

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public data GetProductsAndFilters(data filters) 
{ 
    JavaScriptSerializer js = new JavaScriptSerializer(); 
    //List<dvals> json = js.Deserialize<List<dvals>>(filters); 
    //data json = js.Deserialize<data>(filters); 
    var fname = ""; 
    /* 
    foreach (var filter in filters) 
    { 
     if (filter.Name == "Acer") 
     { 
      fname = filter.Name; 
      break; 
     } 

    }*/ 
    return filters; 
} 

答えて

3

ASP.NET will handle the JSON [de]serialization for you automatically。サーバー側のメソッドを変更して、クライアント側から渡すデータのタイプに合わせます。

編集:そしてJonが指摘したように、データパラメータのプロパティキーは、WebMethodの入力パラメータ名と一致する必要があります(大文字と小文字が区別されます)。また

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public List<dvals> GetProductsAndFilters(List<dvals> dvals) 
{ 
    // Do what you need to with "filters" here. 

    return filters; 
} 

、あなたのJSON.stringify()呼び出しでjson変数が定義されていますか?表示されたコードでは、dataであるはずです。

+0

送信したデータをサーバーに送り返すにはどうすればよいですか。私は年齢のasp.netに触れていない。あなたは私が始めることができるので表示することができます – ONYX

+0

私は間違いを修正するために私のコードを更新しましたが、今私は私のコードの下部にある別のエラーを取得します。 – ONYX

+0

戻り値の型を正しく設定すると(上記の例のコードのように)、ASP.NETは自動的に戻り値をJSONとしてシリアル化します。あなたが質問を更新したときのエラーは、サーバー側コードを更新して二重[de]シリアライゼーションを削除しなかったためです。 –

関連する問題