2012-12-11 5 views
0

J'ai un bouton dans la page Mise en page, qui est censé naviguer entre différentes vues.Demande de redirection vers un autre contrôleur

<a id="next" href="/[email protected]">Next</a> 

Je ViewBag.CurrentPage en valeur peuplent ViewModel de chaque page.

contrôleur de navigation INTERCEPTIONS cliquez d'ancrage dans le contrôleur suivant -

public class NavigationController : Controller 
{ 
    public void Index(string CurrentPage) 
    { 
     PageType currentPageEnum = (PageType)Enum.Parse(typeof(PageType), CurrentPage); 
     PageType nextPageEnum = currentPageEnum + 1; 
     RedirectToAction(nextPageEnum.ToString());    
    } 
} 

Enum contient ActionNames dans un ordre séquentiel, donc incrémenter juste valeur currentPageEnum pour trouver la page suivante.

enum PageType 
{ 
    Page1, 
    Page2 
} 

Chaque action a une voie de cartographie dans Global.asax.cs comme ci-dessous -

routes.MapRoute("Page1", "Page1", new { controller="controller1", action="Page1"}); 
routes.MapRoute("Page2", "Page2", new { controller="controller2", action="Page2"}); 

Question: Je n'ai pas été en mesure de rediriger vers d'autres contrôleurs avec ce code-

RedirectToAction(nextPageEnum.ToString()); 

La requête se termine sans redirection.

  1. De quelles informations ai-je besoin?
  2. est-il un moyen plus efficace pour naviguer entre les vues diffrent, dans ASP MVC

Merci!

Répondre

4

Ajoutez une instruction return et faites en sorte que la fonction renvoie quelque chose.


public class NavigationController : Controller 
{ 
    public ActionResult Index(string CurrentPage) 
    { 
     PageType currentPageEnum = (PageType)Enum.Parse(typeof(PageType), CurrentPage); 
     PageType nextPageEnum = currentPageEnum + 1; 
     return RedirectToAction(nextPageEnum.ToString());    
    } 
} 

Et puisque vous faites référence à un nom de voie tracée et non une action, je crois que vous avez besoin RedirectToRoute au lieu de RedirectToAction comme dans ce code:


public class NavigationController : Controller 
{ 
    public ActionResult Index(string CurrentPage) 
    { 
     PageType currentPageEnum = (PageType)Enum.Parse(typeof(PageType), CurrentPage); 
     PageType nextPageEnum = currentPageEnum + 1; 
     return RedirectToRoute(nextPageEnum.ToString());    
    } 
} 

Mais je dirais que la meilleure façon de naviguer dans un environnement MVC de la vue (rasoir) est comme ceci:

<div> 
    @Html.ActionLink(string linkText, string actionName) 
</div> 

Si l'action est dans le même contrôleur. Dans le cas contraire utiliser cette surcharge:

<div> 
    @Html.ActionLink(string linkText, string actionName, string controllerName) 
</div> 
+0

Merci, cela a aidé. Est-ce cette approche, la meilleure pour implémenter la navigation dans MVC. – Abhijeet

+0

@autrevo J'ai ajouté le meilleur moyen de naviguer à partir de la vue elle-même. – SynerCoder

0

Oui, il existe un moyen efficace ci-dessous:

il suffit d'utiliser

RedirectToAction("ACTION_NAME", "Controller_NAME"); 
Questions connexes