2009-06-18 7 views
1

Je suis en train de poster avec JQuery comme ceci:Publier en utilisant JQuery pour ASP.NET MVC [Authentifier] -wrapped l'action

$.post("NiceController/Create/", { field1: data1, field2: data2 }, 
function(data, textStatus) { 
    if (data.Status) 
     //Do something 
}, "json"); 

Le problème est que quand je ne suis pas authentifié je ne être redirigé vers la page de connexion, car il ne s'agit pas d'un formulaire complet. La question est: Comment, par programme, je sais que je ne suis pas authentifié et que je devrais rediriger vers la page de connexion?

Répondre

1

Je ne sais pas s'il y a une réponse plus officielle, mais pouvez-vous $.get('NiceController/AmILoggedIn') d'abord? Puis, en fonction de la réponse, $.post ou faire une sorte de redirection à travers une page de connexion?

+0

oui, c'est une solution, merci. Je me demande, si je peux encore le faire dans une demande en quelque sorte. – Dale

0

Vous pouvez faire quelque chose comme:

$.post("NiceController/Create/", { field1: data1, field2: data2 }, 
    function(data, textStatus) { 
     if (data.Status) 
      if(data.Status == 'authFailed') { 
       window.location.href = '/login'; 
      } 
     } 
    }, "json"); 
+0

est, je ne reçois pas la fonction résultante. firebug montre qu'il y a une requête GET pour se connecter, mais c'est probablement dans js, ou quelque chose comme ça, parce que la page elle-même n'est pas rafraichie. – Dale

1

Si vous utilisez la méthode ajax, vous devriez être en mesure d'ajouter une fonction de gestion des erreurs. Je crois que puisque vous demandez JSON, un parseerror devrait être retourné puisque ce que vous obtiendrez est une redirection, pas JSON. Vous pouvez également obtenir le même effet à l'aide d'un gestionnaire global ajaxError et continuer à utiliser post.

1

Je suppose que votre NiceController/Create/ redirige vers la page de connexion, et c'est ce que vous voyez. Au lieu d'un bon état, vous récupérez un tas de HTML à partir de la page de connexion.

Vous avez 2 options: supprimez l'attribut Authorize de l'action Créer et gérez-le en interne, par ex. en retournant un message d'erreur JSON.

Ou: vérifier si vous êtes connecté, puis appeler l'action Créer uniquement lorsque l'utilisateur est connecté

problème
+0

Je pense que la meilleure façon est de le gérer en interne, merci. – Dale

Questions connexes