2010-05-14 7 views
6

J'ai une méthode d'action que je voudrais soit renvoyer JSON à une condition ou rediriger sur une autre condition. J'ai pensé que je pourrais faire ceci en renvoyant ActionResult de ma méthode mais en faisant ceci provoque l'erreur "tous les chemins de code ne renvoient pas une valeur"Comment renvoyer JSON ou RedirectToAction?

Quelqu'un peut-il me dire ce que je fais mal? Ou comment atteindre le résultat souhaité?

Voici le code ci-dessous:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Login(User user) 
    { 
     var myErrors = new Dictionary<string, string>(); 
     try 
      { 


       if (ModelState.IsValid) 
       { 
        if (userRepository.ValidUser(user)) 
        { 
         RedirectToAction("Index", "Group"); 
         //return Json("Valid"); 
        } 
        else 
        { 
         return Json("Invalid"); 
        } 

       } 
       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"); 
      } 

     } 

Edit: pour clarifier les choses, je l'ai déjà essayé de return RedirectToAction("Index", "Group"); comme suggéré dans les réponses, mais il ne fait rien. Le point d'arrêt de l'action vers laquelle je redirige n'est pas touché.

Répondre

3

Vous devez changer

RedirectToAction("Index", "Group"); 

à

return RedirectToAction("Index", "Group"); 

Bonté,

Dan

+0

Salut Daniel, j'ai essayé cela, mais il ne semble pas faire quoi que ce soit. Je mets un point d'arrêt dans l'action que je redirige mais cela ne me touche pas. J'ai mis à jour la question avec ça. Merci – DaveDev

+1

Est-ce dans une méthode d'action qui n'accepte qu'un message et que vous essayez de rediriger vers une action qui n'accepte qu'un Get? Je me suis fait trébucher par ça avant. Gentillesse, Dan –

0

vous shold retour RedirectResult. Modifier cette chaîne

if (userRepository.ValidUser(user)) 
        { 
         RedirectToAction("Index", "Group"); 
         //return Json("Valid"); 
        } 

à

if (userRepository.ValidUser(user)) 
        { 
         return RedirectToAction("Index", "Group"); 
         //return Json("Valid"); 
        } 

et tout ira bien fonctionner.

0

Votre manque une déclaration de retour:

return RedirectToAction("Index", "Group"); 

La méthode Controller.RedirectToAction retourne une méthode RedirectToRouteResult et Controller.Json retourne un JsonResult. Les deux s'étendent ActionResult.

0

Je pense que la raison pour laquelle votre redirection n'obtient pas où vous voulez est qu'elle redirige vers une action qui n'accepte que Gets et que vous redirigez une publication.

Bonté,

Dan