2012-03-05 18 views
1

jquery 1.7.1およびjson2.jsjquery ajaxを使用してaspxページのwebmethodに複雑なオブジェクトを送信する

を使用して、aspxページ(asp.net 4.0)のWebMethodに複雑なオブジェクトを送信しようとしています。

私が達成したのは、同じページ上の複数のパラメータを複数のWebメソッドに送信することです。代わりに、これらのパラメータをオブジェクトにラップします。

は、だから私のWebMethod属性は、次のようになります。

[WebMethod] 
public static string ValidateControlInput(PairValue pair) 
{ 
    var result = pair; 
    return String.Format("Valid"); 
} 

私のjavascriptのメソッドは次のようになります。

$(document).ready(ValidateInput); 

function ValidatePairInput(codeId, descriptionId, labelId) { 

var pair = CreatePairObject(codeId, descriptionId); 
    SendDataToValidate(pair, labelId); 
} 

function SendDataToValidate(dataToValidate, controlId) { 

$.ajax({ 
    type: 'POST', 
    url: 'NewDocument.aspx/ValidateControlInput', 
    contentType: 'application/json; charset=utf-8', 
    data: dataToValidate, 
    dataType: 'json', 
    success: function (data, textStatus) { 
     var result = data.d; 
     DisplayValidationMessage(controlId, result); 
    } 
}); 

} 

function DisplayValidationMessage(controlId, result) { 
    $('#' + controlId).text(result); 
} 

function CreatePairObject(codeId, descriptionId) { 
    var pair = { }; 
    pair.Code = $('#' + codeId).val(); 
    pair.Description = $('#' + descriptionId).val();  
    var DTO = { 'pair': pair }; 
    return JSON.stringify(DTO); 
} 

悲しいことに、これは動作しません。私はwebmethodにブレークポイントを設定しましたが、決して打撃を受けません。

私はjavascriptのメソッドこれで 'CreatePairObject' 内のコードを交換する場合:

function CreatePairObject(codeId, descriptionId) { 
    return JSON.stringify({ code: $('#' + codeId).val(), description: $('#' + descriptionId).val() }); 
} 

及びこれにWebMethod属性:

[WebMethod]   
public static string ValidateControlInput(string code, string description) 
{    
    return String.Format("Valid"); 
} 

をそれは魔法のように動作します。それで誰も私にこれを手伝ってもらえますか?どんな助けでも大歓迎です!

答えて

0

あなたの問題は、コードと説明の大文字を書いて、あなたのJSONオブジェクトを入れ子にしていると思います(webmethodに到着するのはペアオブジェクトを含む "pair"属性を持つオブジェクトです)。 代わりにペアオブジェクトを直接シリアル化しようとしてください。

function CreatePairObject(codeId, descriptionId) { 
    var pair = { }; 
    pair.code = $('#' + codeId).val(); 
    pair.description = $('#' + descriptionId).val();  
    return JSON.stringify(pair); 
} 
関連する問題