2012-06-23 30 views
7

Ho ricevuto questo errore "Impossibile trovare una route denominata 'MemberRoute' nella raccolta del percorso. Nome parametro: nome". Ecco il mio Global.asax,Impossibile trovare il nome del percorso nella raccolta del percorso

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      "MemberRoute",      // routeName 
      "member/{userId}/{pseudoName}", // url 
      new 
      {       // url defaults 
       controller = "Member", 
       action = "Index", 
       userId = 0, 
       pseudoName = UrlParameter.Optional 
      }, 
      new 
      {       // url constraints 
       userId = @"\d+" // must match url {userId} 
      } 
     ); 
    } 

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 
} 

MemberController,

public ActionResult Index(int userId, string pseudoName) 
    { 
     User user; 
     var unitOfWork = new UnitOfWork(); 
     user = unitOfWork.UserRepository.GetById(userId); 

     var expectedName = user.PseudoName.ToSeoUrl(); 
     var actualName = (pseudoName ?? "").ToLower(); 

     // permanently redirect to the correct URL 
     if (expectedName != actualName) 
      return RedirectToActionPermanent("Index", "Member", new { id = user.UserId, pseudoName = expectedName }); 
     return View(user); 
    } 

chiamante,

return RedirectToRoute("MemberRoute", new { userId = user.UserId, pseudoName = user.PseudoName }); 

Perché il nome della rotta non essere trovato?

+0

Vedere qui: http://stackoverflow.com/q/8944355/102937 –

+0

Beh, non è necessariamente l'url non viene visualizzato correttamente. Ho provato il reindirizzamento per instradare la cosa e aggiungere il controller/indice e quant'altro, ma rende l'URL simile a site.com/member?userId=1&pseudoName=jondoe piuttosto che a quello che sto cercando di raggiungere, che è site.com/member/ 1/jondoe –

risposta

7

Vieni a scoprire che questo è dovuto a MVC 4 e che tutto il routing personalizzato si trova nella cartella App_Start all'interno del file RouteConfig.cs. Quando ho aperto Global.asax.cs non esisteva il metodo RegisterRoutes, quindi l'ho aggiunto io stesso e aggiunto i miei percorsi personalizzati ma non ha funzionato. Trovato il file RouteConfig e lì era già, il metodo RegisterRoutes con i default già impostati. Aggiunto il mio percorso personalizzato lì e funziona come previsto.

Problemi correlati