2010-05-25 6 views
1

J'essaye de rediriger l'utilisateur s'il se connecte avec succès mais le code que j'ai sur ma page semble empêcher la redirection de fonctionner. Si je supprime le jQuery ci-dessous la redirection fonctionne. Est-ce que quelqu'un peut me dire s'il y a quelque chose que je fais de mal? MercijQuery empêchant RedirectToAction de fonctionner?

je l'action suivante:

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Login(User user) 
     { 
      var myErrors = new Dictionary<string, string>(); 
      try 
      { 
       if (ModelState.IsValid) 
       { 
        if (userRepository.ValidUser(user)) 
        { 
         return RedirectToAction("Index", "Group", new {page = (int?)null}); 

        } 
        else 
       { 
         return Json("Username or password seems to be incorrect"); 
        } 
       } 
       else 
       { 
        foreach (KeyValuePair<string, ModelState> keyValuePair in ViewData.ModelState) 
        { 
         if (keyValuePair.Value.Errors.Count > 0) 
         { 
          List<string> errors = new List<string>(); 

          myErrors.Add(keyValuePair.Key, keyValuePair.Value.Errors[0].ErrorMessage); 
         } 

        } 
        return Json(myErrors); 
       } 
      } 
      catch (Exception) 
      { 
       return Json("Invalid"); 
      } 

     } 

et le code suivant sur ma page:

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     $("#SaveSuccess").hide(); 
     $("#btnLogin").click(function() { 

      $("form").submit(function(event) { 
       var formData = $(this).serialize(); 
       $.post($(this).attr("action"), formData, function(res) { 
        ShowErrors(res); 
        if (res == true) { 

         $("#SaveSuccess").text("Saved"); 
        } 
        else { 
         $("#divError").html(res); 
        } 
        $("#SaveSuccess").fadeIn(100); 
       }, "json"); 
       return false; 
      }); 
     }); 
    }); 
</script> 
+0

http://stackoverflow.com/questions/7824243/jquery-mobile-mvc-getting-the-browser-url-to-change-with-redirecttoaction sauvé le bacon (et la santé mentale). –

Répondre

6

Vous devriez jeter un oeil à this question, votre problème est qu'il est l'envoi d'un 302 (IIRC, il est tôt) en réponse à la requête AJAX, pas une demande de page globale, de sorte que vous devez rechercher cet en-tête et rediriger la page entière si elle est trouvée.

L'approche dans la réponse haut il est probablement aussi propre que possible multi-navigateur, il suffit de retourner JSON avec une URL de redirection et rediriger vers cette URL, comme ceci:

 $("form").submit(function(event) { 
      var formData = $(this).serialize(); 
      $.post($(this).attr("action"), formData, function(res) { 
       if (res.redirect) { 
        window.location.href = res.redirect; 
        return; 
       } 
       ShowErrors(res); 
       if (res == true) { 
        $("#SaveSuccess").text("Saved"); 
       } 
       else { 
        $("#divError").html(res); 
       } 
       $("#SaveSuccess").fadeIn(100); 
      }, "json"); 
      return false; 
     }); 

quelque chose sur le C# Side comme celui-ci au lieu de la redirection:

return JSon({redirect = Url.Action("Index", "Group", new {page = (int?)null})}); 
2

qui est surtout probablement parce que vous avez return false; en place à la fin du code jquery ou il y a probablement une erreur dans votre code jquery, cependant vous pouvez rediriger un utilisateur comme celui-ci:

window.location = 'url-here'; 

ou

document.location.href = 'url-here';