2010-12-10 11 views
1

Wie $ .ajax (..) JSON verwenden, um asmx Webmethoden, die 'by Ref-Argumente' für benutzerdefinierte Klassen/Objekte? Ist es möglich?

My C# -Code -

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

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

Mein js/jquery Code -

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); 
       } 
      }); 

Das alles funktioniert gut, wenn das Argument der Webmethod NICHT ref. Mit der oben erwähnten Unterzeichnung des Webmethod, das heißt mit einem durch ref Argument, erhalte ich einen Serverfehler (in Server-Antwort mit firebub gesehen) -

No parameterless constructor defined... 

Antwort

1

ich fürchte, das ist ein Szenario, das nicht unterstützt wird. Sie könnten das Schlüsselwort ref entfernen und das Argument als Rückgabetyp verwenden, nachdem Sie seinen Wert in der Methode geändert haben.

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

Thx. Ich habe das versucht und es funktioniert wie du erwähnt hast. Hoffe nur, dass – tubelight

+0

@Tubelight, was nicht funktioniert? Als ich es getestet habe, hat es gut funktioniert. Ich konnte den aktualisierten Wert in "response.d.MyProperty" abrufen. –

+0

Thx Darin. Ich habe das versucht und es funktioniert wie du erwähnt hast. Ich hoffe nur, dass es etwas gibt, das ich vermisse und wenn es gut behandelt wird, wird es mit einem by ref arg funktionieren. – tubelight

Verwandte Themen