2010-08-31 6 views
1

Je construis un site Web asp.net mvc2 et en utilisant beaucoup d'éléments de formulaire ajax (Ajax.BeginForm pour être exact) pour remplir de manière asynchrone des données sur la page. Je souhaite rediriger l'utilisateur vers la page de connexion après x période d'inactivité sur le site. Lorsque je le fais actuellement, soit par ActionExecutingContext, soit par HttpContext, la page de connexion est remplie dans l'élément div actuel pour ce formulaire ajax, au lieu de la page entière. Des idées sur la façon de l'obtenir pour rediriger la page actuelle?Erreur de redirection pour Ajax Froms dans asp.net mvc2

Répondre

2

Solution:

override l'événement OnActionExecuted dans votre contrôleur de base et créer un RedirectResult appeler en pour chaque fois que vous vouloir rediriger. Ajouter le code suivant:

protected RedirectResult Redirect(string url, ActionExecutedContext filterContext) 
{ 
    return new AjaxErrorRedirectResult(url, filterContext); 
} 

public class AjaxErrorRedirectResult : RedirectResult 
    { 
     public AjaxErrorRedirectResult(string url, ActionExecutedContext filterContext) 
      : base(url) 
     { 
      ExecuteResult(filterContext.Controller.ControllerContext); 
     } 

     public override void ExecuteResult(ControllerContext context) 
     { 
      if (context.RequestContext.HttpContext.Request.IsAjaxRequest()) 
      { 
       string redirectUrl = "www.google.com"; 

       JavaScriptResult result = new JavaScriptResult() 
       { 
        Script = "self.parent.location='" + redirectUrl + "';" 
       }; 
       result.ExecuteResult(context); 
      } 
      else 
      { 
       base.ExecuteResult(context); 
      } 
     } 
    } 
0

Si vous souhaitez rediriger l'utilisateur vers une autre page (page de connexion) lorsque le formulaire est soumis, pourquoi utiliser ajax? AJAX est mieux utilisé pour la manipulation d'une partie de la page et non la page entière.

Le Ajax.BeginForm a pour objet d'option pour spécifier l'id de l'élément HTML pour être mis à jour et du type de la mise à jour

exemple

Ajax.BeginForm("Create", "Project", 
       new AjaxOptions() { 
            UpdateTargetId = "projectform", 
            InsertionMode = InsertionMode.Replace, 
            HttpMethod = "Post" }) 

L'option InsertionMode a trois valeurs Replace, InsertAfter Dans votre cas, je ne sais pas si vous pouvez cibler la balise HTML dans UpdateTargetId. mais comme je l'ai dit plus tôt, il est préférable d'utiliser une requête normale dans ce scénario et de ne pas mettre à jour toute la page en utilisant Ajax.

sur la redirection de l'utilisateur vers la page de connexion après une période d'inactivité. Je crois que Sessions est la bonne façon de le faire. Je ne suis pas sûr cependant comment c'est fait.

Mise à jour:

J'espère que ce lien vous aidera: http://blog.tallan.com/2010/06/25/handle-asp-net-mvc-session-expiration/

+0

Je fais mes formulaires Ajax comme vous le montrer ici, seule différence est tous mes appels sont get, pas de Postes. Cela fonctionne très bien. J'utilise également des sessions pour contrôler le temps d'arrêt de l'utilisateur, cela fonctionne également très bien. C'est quand les deux travaillent côte à côte, j'ai le problème. Voici ce qui se passerait en fonction de l'exemple que vous venez de publier: 1. les mises à jour du contrôle projectForm comme prévu 2. l'utilisateur s'éloigne depuis longtemps, revient essaie de publier à nouveau 3. session expire et veut les rediriger pour se connecter .aspx. 4. seul l'élément projectFrom rend signin.aspx html. –

+0

Oh ,,, j'ai votre problème maintenant. peut-être cela aidera http://stackoverflow.com/questions/2259225/how-can-i-redirect-in-asp-mvc-when-an-ajax-request-is-made (voir la deuxième solution) –

+0

Merci homme pour les réponses rapides, vos messages m'ont définitivement mis sur la bonne voie, avec quelques modifications. J'ai posté une réponse pour référence. –