2010-03-26 8 views
0

J'ai un petit problème avec une boîte de dialogue Jquery pour une action nécessitant un rôle. Dans mon exemple, l'utilisateur peut cliquer sur un bouton de suppression et confirmer l'action. Dans mon contrôleur, l'action Supprimer nécessite un rôle, si l'utilisateur a le rôle requis, l'objet est supprimé.Problème de boîte de dialogue Autorisation et Jquery

Le problème: Comment alerter l'utilisateur si * l'élément a été supprimé (redirect à l'affichage d'index) * il y avait une erreur (alerte avec le message) * il n'a pas le droit de supprimer (avec le message)

Avant d'utiliser le filtre d'autorisation, l'action de suppression renvoyait un JSON avec un booléen qui indiquait s'il y avait une erreur, une URL à rediriger en cas de succès et un message à alerter en cas d'erreur.

Comme je ne peux pas renvoyer un JSON de mon filtre, j'ai créé une autre méthode avec le filtre d'autorisation qui renvoie une vue partielle avec le contenu de confirmation. Si l'utilisateur n'a pas les droits, le filtre renvoie une vue partielle avec un contenu d'exception non autorisé.

Le problème: Comment distinguer quelle vue partielle a été renvoyée. Lorsque je crée la boîte de dialogue, j'ai besoin de savoir pour la fonction des boutons.

Merci!

Répondre

0

trouvé une solution en ajoutant du code à la Global.asax:

protected void Application_EndRequest() 
    { 
     if (Context.Response.StatusCode == 302 && 
      Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest") 
     { 
      Context.Response.Clear(); 
      Context.Response.StatusCode = 401; 
     } 
    } 
0

Je suggère d'ajouter quelque chose à votre modèle où la boîte de dialogue jquery est construite comme l'indicateur CanDeleteItem. Puis construisez votre boîte de dialogue en utilisant cette information au lieu de supposer qu'ils ont les autorisations à supprimer. Montrer un bouton que l'utilisateur ne peut pas utiliser est une mauvaise idée.

Pour les autres situations d'erreur, si vous utilisez jquery.ajax pour publier une action de suppression, l'événement onerror doit être déclenché lorsqu'une exception est générée par le contrôleur.

$.ajax({ 
    url: "/delete/5", 
    type: "POST", 
    success: function(json){ 
    // the delete happened 
    }, 
    error: function(request, status, error){ 
    // it failed, authorization(403) or just an error (500) 
    } 
}); 
+0

Le problème est la redirection après une erreur 401. Ma fonction ajax jamais obtenir une erreur, mais le contenu de mon avis de connexion. – Benjamin

+0

Votre contrôleur possède-t-il l'attribut HandleError? Essayez de supprimer cet attribut et de voir si la fonction ajax de l'erreur est appelée. – Jab