wake-up-neo.net

Aufruf von ASP.NET PageMethod/WebMethod mit jQuery - gibt die gesamte Seite zurück

jQuery 1.3.2, ASP.NET 2.0. Durch Aufruf eines AJAX - Aufrufs an eine PageMethod (WebMethod) wird die ganze/ganze Seite zurückgegeben und nicht nur die Antwort. Ein Haltepunkt auf der Seitenmethode zeigt, dass er nie getroffen wird. Ich habe das [WebMethod] -Attribut für meine Methode, und ist public static, gibt string zurück und akzeptiert keine Parameter. Ich habe sogar versucht, [ScriptService] oben in meiner Klasse hinzuzufügen, um zu sehen, ob es geholfen hat, aber es hat nicht funktioniert.

Ich habe diesen Beitrag Jquery AJAX mit ASP.NET WebMethod Returning Gesamte Page gesehen, das meine gleichen Symptome hatte, aber ich habe immer noch ein Problem. Ich lese http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ und ich habe das Gefühl, ich folge dem T aber immer noch kein glück.

Der jQuery-Aufruf, den ich anrufe, lautet:

jQuery.ajax({
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: '{}',
    dataType: 'json',
    url: 'MyPage.aspx/SomePageMethod',
    success: function(result){
        alert(result);
    }
});

Die Anforderungs-/Antwort-Header laut Firebug in FF3 lauten wie folgt

Response Headers
Server  ASP.NET Development Server/8.0.0.0
Date    Tue, 24 Feb 2009 18:58:27 GMT
X-AspNet-Version    2.0.50727
Cache-Control   private
Content-Type    text/html; charset=utf-8
Content-Length  108558
Connection  Close

Request Headers 
Host    localhost:2624
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
Accept  application/json, text/javascript, */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  300
Connection  keep-alive
Content-Type    application/json; charset=utf-8
X-Requested-With XMLHttpRequest
Referer http://localhost:2624/MyApp/MyPage.aspx
Content-Length  2
Cookie  ASP.NET_SessionId=g1idhx55b5awyi55fvorj055; 

Ich habe meiner Seite einen ScriptManager hinzugefügt, nur um zu sehen, ob es geholfen hat, aber kein Erfolg.

Irgendwelche Vorschläge?

35
Matt

Wissen Sie, dass Page Methods ordnungsgemäß funktionieren? Wenn Sie den ScriptManager verwenden, funktionieren sie?

Es klingt so, als ob Ihnen a web.config entry fehlt. Insbesondere der Abschnitt HttpModules.

27
Dave Ward

Mir fehlte eine Zeile aus meiner web.config:

<system.web>
  <httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </httpModules>
</system.web>
23
adam seabridge

Dieses Problem ist mir heute aus einem anderen Grund wieder begegnet: Ich hatte die "Anwendung" falsch geschrieben 

contentType: 'application/json'

Und erhielt eine ganzseitige Antwort anstelle eines Aufrufs der WebMethod.

13
Matt

Wenn Sie dies alles ausprobiert haben und die gesamte Seite trotzdem von Ihrer Seitenmethode zurückgegeben wird, möchten Sie möglicherweise sicherstellen, dass Sie keine freundlichen URLs verwenden .. Wenn Sie sie verwenden, kann Ihnen dieser Trick helfen

Fügen Sie diese Zeile in Ihr js-Skript ein, bevor Sie den Aufruf tätigen:

PageMethods.set_path(PageMethods.get_path() + '.aspx');
6
Marvin Zumbado

Wir werfen dies hier als Randnotiz heraus. Ich erhielt diesen Fehler aufgrund der Länge meiner String-Variablen in meinem HTML-String und der Website, auf der mein Ajax aufgerufen wurde, sah so aus.

loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "Default.aspx" : loc;
        $.ajax({
            type: "POST",
            url: loc + "/" + methodName,
            data: "{" + args + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: onSuccess,
            error: onFail
        });

Es war nicht in der Lage, den .aspx-Link korrekt zu extrahieren, daher habe ich meine Webseite nur hartcodiert, anstatt die loc var zu verwenden.

1
Dan Simon

Das Kommentieren der folgenden Zeile in RouteConfig.cs funktioniert für mich

 settings.AutoRedirectMode = RedirectMode.Permanent;
0
Hassan Nazeer

Die meisten Ajax-Szenarien, die ich gesehen habe, sollten einen Webdienst oder einen separaten Skript-Handler und keine Seite aufrufen. Das ist extrem einfach in .net 3-5, nicht so einfach in 2-0. Auch wenn Sie herausgefunden haben, wie die gesamte Seite nicht geladen werden soll, gibt es Gründe, keine Seitenmethode aufzurufen:

1) Die Seitenmethode lädt möglicherweise weniger als eine vollständige Seitenlast, aber noch viel mehr, als Sie für einen einfachen Ajax-Aufruf benötigen . 2) Miese Trennung der Verantwortlichkeiten. Die Seite ist wahrscheinlich dafür verantwortlich, dass das Material gut verteilt wird, nicht die Logik, die Sie in der Ajax-Methode verwenden.
3) Vielleicht benötigen Sie einen Sitzungsstatus, der aber noch verfügbar sein sollte. 

Ich aktualisiere derzeit mein Wissen zu diesem Thema ... Ich werde in diesem Thread nach einer guten Antwort auf diese Frage suchen, oder ich werde nächste Woche eine neue posten. Hier ist die Richtung, in die ich gehe 

1) Senden Sie JSON vom Server zum Client und aktualisieren Sie Ihre Seite mit JavaScript. - Verschiedene Frameworks erleichtern die Produktion von JSON vom Webserver.
2) JQuery macht Ajax-Aufrufe, Json-Handling und Client-Formatierungsspaß statt schmerzhaft. 

Nach fast zwei Stunden und nachdem alles versucht hatte, löste ich es endlich. @ Marvin Zumbados Kommentar half mir. Mir fehlte die .aspx von meiner Url. Ich weiß, das ist nicht mein bester Moment als Programmierer!

0