2010-12-10 22 views
1

Comment utiliser $ .ajax (..) JSON pour appeler asmx webmethods qui ont 'par ref arguments' pour les classes/objets personnalisés? C'est possible?

Mon code C# -

public class MyCustomClass{ public int MyProperty; MyCustomClass(){}} 

    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]  
    public Method1(ref MyCustomClass MyCustomObj) 
    { MyCustomObj.MyProperty*=2; return MyCustomObj;} 

Mon js/code jquery -

function myCustomClass(){this.myProperty;}   
var myCustomObj = new myCustomClass(); 
myCustomObj.myProperty = 100; 

$.ajax({ 
       type: "POST", 
       data: "{'myCustomObj': " + JSON.stringify(myCustomObj) + "}", 
       url: "test.asmx/Method1", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(response) { 
        var data = response.d; 
        alert(data.MyProperty); 
       }, 
       failure: function(msg) { 
        alert(msg); 
       } 
      }); 

Tout cela fonctionne bien si l'argument du webmethod est pas par ref. Avec la signature mentionnée ci-dessus du webmethod, à savoir un par l'argument ref, je reçois une erreur de serveur (en réponse du serveur vu en utilisant firebub) -

No parameterless constructor defined... 

Répondre

1

Je crains que ce soit un scénario qui n'est pas pris en charge. Vous pouvez supprimer le mot clé ref et utiliser l'argument comme type de retour après avoir modifié sa valeur dans la méthode.

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]  
public MyCustomClass Method1(MyCustomClass MyCustomObj) 
{ 
    MyCustomObj.MyProperty *= 2; 
    return MyCustomObj; 
} 
+0

Thx Darin. J'ai essayé cela et cela fonctionne comme vous l'avez mentionné. En espérant que – tubelight

+0

@tubelight, ce qui ne fonctionne pas? Quand j'ai testé ça a bien fonctionné. J'ai été en mesure d'obtenir la valeur mise à jour dans 'response.d.MyProperty'. –

+0

Thx Darin. J'ai essayé cela et cela fonctionne comme vous l'avez mentionné. En espérant qu'il y a quelque chose qui me manque et si on s'en occupe, ça marchera avec un ref arg. – tubelight