4

Voici mes itinéraires de définition Global.asax.cs:Routes non trouvées ou construits de manière incorrecte

routes.Add(
    new NamedTypedRoute(
    "feedback-en", RouteType.Regular, "{culture}/Feedback", 
    new RouteValueDictionary(
     new 
     { 
     culture = "en", 
     controller = "Feedback", 
     action = "Index" 
     } 
    ), 
    null, 
    new MultiLingualMvcRouteHandler() 
) 
); 

routes.Add(
    new NamedTypedRoute(
    "feedback-sl", RouteType.Regular, "{culture}/Kontakt", 
    new RouteValueDictionary(
     new 
     { 
     culture = "sl", 
     controller = "Feedback", 
     action = "Index" 
     } 
    ), 
    null, 
    new MultiLingualMvcRouteHandler() 
) 
); 

Si je le fais dans la vue

<%: Html.ActionLink("sl", "feedback-sl")%> | <%: Html.ActionLink("en", "feedback-en")%> 

les points d'URL construits à la racine site (aucune information de contrôleur/d'action n'est incluse dans le lien construit).

Si je le fais dans la vue

<%: Html.RouteLink("sl", "feedback-sl")%> | <%: Html.RouteLink("en", "feedback-en")%> 

une exception se produit:

"A route named 'feedback-sl' could not be found in the route collection. 
Parameter name: name" 

Mes deux questions:

  1. Pourquoi deux aides très similaires, RouteLink et ActionLink ? Quelle est la différence entre eux?
  2. Je suppose qu'il peut y avoir quelque chose de mal avec mon implémentation NamedTypedRoute. J'ai besoin que cela ait des routes nommées et des routes typées - l'itinéraire peut être admin et régulier. J'utilise cette information pour construire dynamiquement le menu d'administration en fonction de la définition des routes. Pour les pages d'administration, j'ai des noms pointant vers des chaînes de ressources, puis j'utilise ces noms dans les titres des pages d'administration. De cette façon, j'ai des noms de routes localisables. Suis-je trop compliqué?
+0

Pourriez-vous s'il vous plaît partager avec nous l'implémentation de 'NamedTypedRoute' et' MultiLingualMvcRouteHandler'? Il peut y avoir un problème avec l'un d'entre eux. – Venemo

Répondre

1

L'extension Html.ActionLink restitue un élément d'ancrage lié à une action. D'autre part, l'extension Html.RouteLink restitue un élément d'ancrage qui peut être résolu en une méthode d'action, un fichier, un dossier ou une autre ressource. Le RouteLink ne prend pas vraiment les chaînes ActionName et ControllerName comme ActionLink. De plus de détails, regardez un peu les noms des paramètres pour les paramètres. Les descriptions ici ne sont pas vraiment bien écrites dans MSDN/IntelliSense.

Malheureusement, je n'ai pas de réponse à la deuxième question.