Gibt es eine Anforderung von Request.IsMvcAjaxRequest () für jQuery?

8

Ich bevorzuge jQuery mit meinen ASP.NET MVC-Apps als die Microsoft Ajax-Bibliothek. Ich habe meinen Aktionen einen Parameter namens "Modus" hinzugefügt, den ich in meinen Ajax-Anrufen eingestellt habe. Wenn es bereitgestellt wird, gebe ich ein JsonViewResult zurück. Wenn es nicht geliefert wird, nehme ich an, es war ein Standard-Http-Post und ich gebe ein ViewResult zurück.

Ich möchte etwas Ähnliches wie IsMvcAjaxRequest in meinen Controllern verwenden können, wenn ich jQuery verwende, damit ich den zusätzlichen Parameter in meinen Aktionen eliminieren kann.

Gibt es etwas da draußen, das diese Fähigkeit in meinen Controllern oder auf eine einfache Weise bietet? Ich möchte nicht verrückt werden, Code zu schreiben, da das Hinzufügen eines einzelnen Parameters funktioniert, ist einfach nicht ideal.

    
Andrew Van Slaars 14.11.2008, 02:48
quelle

4 Antworten

12

Hier ist eine Ausnahme von MVC RC1 Release Notes - Jan 2009

IsMvcAjaxRequest Umbenannt in IsAjaxRequest

  

Die IsMvcAjaxRequest-Methode war   umbenannt in IsAjaxRequest. Im Rahmen   Diese Änderung ist die IsAjaxRequest-Methode   wurde aktualisiert, um das zu erkennen   X-Requested-Mit HTTP-Header. Das ist   ein bekannter Header, der vom Major gesendet wurde   JavaScript-Bibliotheken wie   Prototype.js, jQuery und Dojo.

     

Die ASP.NET AJAX-Helfer wurden aktualisiert, um diesen Header zu senden   Anfragen. Sie fahren jedoch fort   Sende es auch in den Körper des Formulars   Post, um das Problem zu umgehen   von Firewalls, die unbekannt entkleiden   Header.

Mit anderen Worten - es wurde speziell umbenannt, um mit anderen Bibliotheken "kompatibler" zu sein.

Außerdem für alle, die die vollständigen Versionshinweise noch nicht gelesen haben, aber bereits verwendet haben vorherige Versionen - sogar so aktuell wie die Beta - ich empfehle Ihnen, sie vollständig zu lesen. Es wird Ihnen in Zukunft Zeit ersparen und Sie wahrscheinlich mit einigen der neuen Funktionen begeistern. Es ist ziemlich überraschend, wie viel neues Zeug drin ist.

Wichtiger Hinweis: Sie müssen sicherstellen, dass Sie die .js-Datei für MicrosoftAjax.MVC (nicht den genauen Namen) aktualisieren, wenn Sie von Beta auf RC1 aktualisieren - andernfalls funktioniert diese Methode nicht . Es ist in den Versionshinweisen nicht als erforderliche Aufgabe für das Upgrade aufgeführt, also vergessen Sie nicht.

    
Simon_Weaver 31.01.2009, 11:17
quelle
4

Siehe Simons Antwort unten. Die Methode, die ich hier beschreibe, wird in der neuesten Version von ASP.NET MVC nicht mehr benötigt.

Die Methode IsMvcAjaxRequest funktioniert derzeit so, dass sie Request["__MVCASYNCPOST"] == "true" überprüft, und sie funktioniert nur, wenn es sich bei der Methode um eine HTTP POST-Anfrage handelt.

Wenn Sie HTTP POST-Anfragen durch jQuery machen, können Sie den __MVCASYNCPOST -Wert dynamisch in Ihre Anfrage einfügen und dann können Sie die IsMvcAjaxRequest Erweiterungsmethode nutzen.

Hier ist ein Link zur Quelle der IsMvcAjaxRequest-Erweiterungsmethode für Ihre Bequemlichkeit.

Alternativ können Sie einen Klon der aufgerufenen IsMvcAjaxRequest Erweiterungsmethode erstellen IsjQueryAjaxRequest , das Request["__JQUERYASYNCPOST"] == "true" überprüft und Sie könnten diesen Wert dynamisch in den HTTP POST einfügen.

Aktualisieren

Ich habe beschlossen, weiterzumachen und hier eine Einstellung zu geben, ist das, was mir eingefallen ist.

Erweiterungsmethode

%Vor%

Überprüfung von einer Aktion, wenn es sich bei einer Methode um eine Anfrage von jQuery $ .ajax () handelt:

%Vor%

JavaScript

%Vor%     
spoon16 31.01.2009 21:46
quelle
3

Warum überprüfen Sie nicht einfach den HTTP-Header "X-Requested-With", der von den meisten Javascript-Bibliotheken (wie jQuery) automatisch gesendet wird?

Es hat den Wert 'XMLHttpRequest', wenn eine GET- oder POST-Anfrage gesendet wird.

Um es zu testen, sollten Sie nur die NameValueCollection "Request.Headers" in Ihrer Aktion überprüfen, das heißt:

%Vor%

Auf diese Weise können Sie normale Browseranforderungen einfach von Ajax-Anfragen unterscheiden.

    
Franck 26.11.2008 19:14
quelle
0

Ok, ich habe diesen Schritt noch einen Schritt weiter gemacht und meine jQuery-Datei modifiziert, um den zusätzlichen Parameter in die Post-Daten zu laden, so dass ich für jeden zu postenenden Aufruf nicht "__JQUERYASYNCPOST: true" wiederholen muss. Für jeden, der interessiert ist, hier ist meine neue Definition für $ .post:

%Vor%

Ich habe die Variable "postIdentifier" sowie den Aufruf von jQuery.extend hinzugefügt. Jetzt funktioniert der Helper, der in der Antwort von löffel16 erklärt wurde, ohne dass ich etwas zu meinem jQuery-Code auf Seitenebene hinzufügen muss.

    
Andrew Van Slaars 26.11.2008 18:52
quelle