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.
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.
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%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.
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.
Tags und Links asp.net-mvc javascript jquery ajax