La détection de IsAjaxRequest() avec ASP.NET MVC et JQuery Forme de Plugin / Upload de Fichier
Je suis en utilisant JQuery Forme de plugin pour faire un upload de fichier sur un ASP.NET application MVC. J'ai appris que, depuis une iframe est utilisé pour l'upload de fichiers (plutôt que de XMLHttpRequest, qui n'est pas possible), la vérification côté serveur pour IsAjaxRequest échoue.
J'ai vu quelques messages liés à cette question mais je n'ai pas trouvé de bonnes solutions pour contourner ce problème. Comme avec le reste de ma demande, j'aimerais être en mesure de soutenir à la fois JavaScript activé et désactivé JavaScript scénarios, c'est pourquoi je tiens à détecter si une requête ajax ou pas.
Je me rends compte que l'iframe approche utilisée n'est pas techniquement en ajax, mais je suis en train d'imiter un ajax effet.
Toute suggestion serait la bienvenue.
OriginalL'auteur goombaloon | 2009-11-05
Vous devez vous connecter pour publier un commentaire.
Je viens de réaliser que je suis totalement ne pas répondre à la question, je suis donc à ajouter de la page ici, et de laisser ma vieille réponse ci-dessous:
Le problème est lors de l'affichage d'un fichier sur une iFrame, le "X-requested-with" en-tête n'est pas réglé et vous ne pouvez pas configurer des en-têtes de requête pour une normale de POST de formulaire en Javascript. Vous devrez recourir à d'autres trucs, comme l'envoi d'un champ caché avec votre POST qui contient une valeur, et ensuite les modifier ou remplacer le "IsAjaxRequest" méthode d'extension, également, de vérifier cette condition.
Comment remplacer une extension existante méthode?
Probablement la meilleure option serait probablement inclure votre propre méthode d'extension avec un nom différent, basé sur la valeur par défaut MVC méthode d'extension de code avec les modifications apportées à détecter votre iFrame télécharger, afficher, puis à l'aide de la méthode d'extension de l'endroit où vous vous attendez à ce besoin.
jQuery définit en fait le "X-requested-with' header 'XMLHttpRequest' par défaut. Il est très utile aussi longtemps que vous êtes prudent de faire tous vos appels AJAX sur jQuery.
En fonction de vos besoins, il est facile à l'installation de la détection d'une action de filtre à utiliser en cas de besoin, ou même de l'intégrer dans une classe de contrôleur de la sorte:
La ActionFilterAttribute:
Et à l'aide de la mise en œuvre:
Merci pour l'information. Suivant votre exemple, j'ai fini par ajouter dynamiquement une forme cachée de la valeur ("isFileUploadAjaxPost") via JQuery. Dans le contrôleur, j'ai vérifier que la variable de formulaire. Si elle est présente, j'utilise TempData pour stocker cette valeur avant l'appel de RedirectToAction pour afficher le menu "edition" de la vue pour le nouveau fichier téléchargé. Lors de la réception de la méthode d'action, j'ai vérifier à la fois la Demande.IsAjaxRequest() (comme je l'ai fait tout au long) ainsi que ma TempData valeur pour déterminer si la demande est "ajax" ou pas. Fonctionne très bien. Merci!
J'ai corrigé le code maintenant, mais oui, j'ai réalisé après avoir fait et puis, regardant la IsAjaxRequest méthode d'extension qui est exactement le même. J'ai adapté le code à partir d'un ActionFilter dynamique des jeux de la master page basée sur le type de demande qui est évidemment un peu moins redondant que le code ci-dessus.
Concision:
var requestWith = filterContext.HttpContext.Request.Headers["X-Requested-With"]; myController.IsAjaxRequest = requestWith == "XMLHttpRequest;"
OriginalL'auteur Jay
Vous devez définir le "X-requested-with-tête pour les IsAjaxRequest méthode pour renvoyer la valeur true. Voici comment le faire en jquery.
Cela aurait été la solution idéale, si il a travaillé...
a travaillé pour moi dans angulaire
$httpProvider.defaults.headers.common = { 'X-Requested-With' : 'XMLHttpRequest' };
OriginalL'auteur zowens
De ASP.NET MVC 2 (et au-delà), il existe une méthode d'extension sur le
Request
.À l'aide d'une méthode jQuery comme .charger() sur un contrôleur de méthode entraînera
Request.IsAjaxRequest()
renvoyer true.OriginalL'auteur Nick Josevski