2010-12-08 10 views
0

Ich habe eine Methode, die wie folgt aussieht:<WebMethod()> Attribut ändert sich von 2,0 bis 3,5

<WebMethod()> _ 
Public Function Search(ByVal q As String) As String 

Update von .net 2.0 bis 3.5 erscheint diese gebrochen zu haben.

Wir machen data.split() auf den zurückgegebenen Wert, und das erzeugt einen Fehler - es sieht so aus, als wäre der zurückgegebene Wert nun eine JSON-Struktur, keine einfache Zeichenfolge.

Gibt es eine Möglichkeit, zum vorherigen Verhalten zurückzukehren?

+0

Was meinst du mit "kaputt"? Sei genau. .NET 3.5 verwendet immer noch CLR 2.0 und es gab nur sehr wenige Änderungen an ASMX-Webdiensten. –

+0

Unterbrochen vor der Aktualisierung, haben wir data.split() mit dem zurückgegebenen Wert ausgeführt, und jetzt schlägt es mit einem Fehler "nicht implementiert" fehl. – chris

Antwort

0

Sie werden System.Web.Script.Services

Dann importieren müssen, versuchen Sie dieses Attribut hinzufügen:

<WebMethod()> _ 
<ScriptMethod(ResponseFormat:=ResponseFormat.Xml)> _ 

Wie Sie die Web-Methode aufrufen? Durch Javascript?

+0

yup - jquery Autocomplete – chris

+0

Achten Sie darauf, einen DataType-Parameter in Ihren Ajax-Methoden anzugeben. Wenn Sie nicht angeben, wird jquery raten. http://api.jquery.com/jQuery.ajax/ – ScottE

+0

dataType ist "json" - wir bekommen eine JSON-Struktur zurück, aber anscheinend vor der Aktualisierung auf 3.5 war es eine einfache Zeichenfolge. Versucht zu verifizieren, dass dies eine Änderung zwischen 2.0 und 3.5 war, und zu sehen, ob es eine Möglichkeit gibt, zu dem vorherigen Verhalten zurückzukehren oder Beweise dafür zu liefern, dass wir unsere js-Aufrufe aktualisieren müssen. – chris

0

Wir hatten ein ähnliches Problem. Mit dem grundlegenden Setup von Webmethod und jquery ajax call mit 2.0 gibt es einen String (Typ String in js) oder String Array (Typ Objekt in js) zurück, in 3.5 gibt es immer ein Objekt zurück und die zurückgegebenen Daten liegen unter .d bei der Rückgabe ein Primitiv wie ein String oder ein String-Array.

Meine beste Lösung war bisher eine Javascript-Methode, um nach .d zu suchen.

function getResponse(r){ 
     if(r.d!=null){ 
      return r.d; 
     }else{ 
      return r; 
     } 
    } 

Ich habe zu unterstützen sowohl die 2,0 und 3,5 Anrufe für den Übergang und würde lieber nicht zu viel Energie aufwenden müssen als 2.0 wird bald verschwunden sein.

Aber ich wäre lieber eine bessere Lösung.