2010-05-14 11 views
6

Ho un metodo di azione che mi piacerebbe restituire JSON a una condizione o reindirizzare su un'altra condizione. Ho pensato che avrei potuto farlo restituendo ActionResult dal mio metodo, ma facendo questo si genera l'errore "non tutti i percorsi di codice restituiscono un valore"Come restituire JSON o RedirectToAction?

Qualcuno può dirmi cosa sto facendo male? O come ottenere il risultato desiderato?

Ecco il codice qui sotto:

[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: Per chiarire, ho già provato a return RedirectToAction("Index", "Group"); come suggerito nelle risposte, ma non fa nulla. Il punto di interruzione dell'azione a cui sto reindirizzando non viene colpito.

risposta

3

è necessario modificare

RedirectToAction("Index", "Group"); 

a

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

Gentilezza,

Dan

+0

Ciao Daniele, ho provato questo, ma non sembra di fare nulla. Inserisco un breakpoint nell'azione a cui sto reindirizzando ma che non viene colpito. Ho aggiornato la domanda con questo. Grazie – DaveDev

+1

Si tratta di un metodo di azione che accetta solo un post e si sta tentando di reindirizzare a un'azione che accetta solo Get? Sono stato inciampato da quello prima. Gentilezza, Dan –

0

occorre seguire ritorni RedirectResult. Modificare questa stringa

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

a

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

e tutto funzionerà bene.

0

tuo manca una dichiarazione di ritorno:

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

Il metodo Controller.RedirectToAction restituisce un metodo RedirectToRouteResult e Controller.Json restituisce un JsonResult. Entrambi si estendono ActionResult.

0

Penso che il motivo per cui il reindirizzamento non sta ottenendo dove si desidera è che si sta dirigendo verso un'azione che accetta solo Gets e si sta reindirizzando un post.

Gentilezza,

Dan

Problemi correlati