2010-08-11 3 views
0

J'ai un itinéraire défini comme tel:ActionLink avec routeValues ​​crée un style old-skool URL

routes.MapRoute(
     "CustomerWithScreenName", // Route name 
     "Customer/{sn}/{action}", // e.g. Customer/KingKong89/Schedule 
     new { controller = "Customer", action = "Signup", id = "" } // Parameter defaults 
    ); 

Mais quand je formule un lien en utilisant ActionLink comme ceci:

<%: Html.ActionLink("Click here", "Schedule", "Customer", new { sn = "KingKong89", new { @class="topLink" })%> 

Le lien hypertexte/URL résultant sort comme ceci:

http://localhost:65071/Customer/Schedule?sn=KingKong89

Il fonctionne, mais j'EXPE CTED ActionLink utiliser les routes connues et construire le lien correct qui serait:

http://localhost:65071/Customer/KingKong89/Schedule

Est-ce mon attente ne va pas? Est-ce l'URL paramétrée comme cela devrait fonctionner?

Remarque: Je ne spécifie pas {controller} dans la route. Je n'arrive pas à mélanger cette route avec la route {controller} {action} {id} plus orthodoxe - peut-être que je devrais arrêter d'essayer d'être intelligent et d'adopter la convention.

Merci pour votre aide. Luke

MISE À JOUR

J'ai une théorie que sans une voie appropriée (y compris le mot-clé spécial {contrôleur}), je ne serai pas en mesure de faire ActionLink produire des URL appropriées.

Je me tourne maintenant mes vues sur la raison pour laquelle cet itinéraire simple ne fonctionne pas:

routes.MapRoute(
     "ControllerWithScreenName", // Route name 
     "{controller}/{sn}/{action}", // e.g. Customer/Dave/Schedule 
     new { controller = "Customer", action = "Signup", sn = "" } // Parameter defaults 
     ); 

Comme la seule voie, ainsi que la valeur par défaut « Root », il ne joue pas la balle. Si le nom du contrôleur est ajouté spécifiquement (comme dans le premier extrait ci-dessus), c'est le cas.

MISE À JOUR 2

En raison des contraintes de temps, je donne sur mon param-avant action URL de style et retourner au contrôleur par défaut \ Action \ param - c'est une petite chose dans le grand plan de progrès et ne pas se sentir frustré et déprimé.

MISE À JOUR 3

Je vais décommenter toutes mes voies smart-cul et essayez d'utiliser un RouteLink et préciser le type d'itinéraire à utiliser. Je pense que c'est la raison d'être du commentaire RouteLink.

MISE À JOUR 4

Ce n'est pas bon. Cela nécessite que l'application ait connaissance des routes à suivre, ce qui signifie que je perds l'option de modifier le routage à l'avenir et que tous les liens sont automatiquement mis à jour.

Répondre

1

La première chose, vous définissez votre itinéraire avec un paramètre utilisé, vous devez définir votre itinéraire comme celui-ci

routes.MapRoute(
    "CustomerWithScreenName", // Route name 
    "Customer/{sn}/{action}", // e.g. Customer/KingKong89/Schedule 
    new { controller = "Customer", action = "Signup", sn= "" } // Parameter defaults 
); 

Le sn dans votre définition n'est pas défini dans vos paramètres au lieu que vous définissez id. Définissez votre itinéraire avant l'itinéraire par défaut.

Deuxièmement, votre ActionLink devrait ressembler à ceci

<%= Html.ActionLink("Click here", "Schedule", "Customer", new { sn = "KingKong89" }, new { @class = "topLink" })%> 

Enfin, dans votre contrôleur, votre paramètre pour la méthode d'action annexe doit être sn pas id

public ActionResult Schedule(string sn) 
{ 
    return View(); 
} 
+0

Salut Rob, et merci pour votre Aidez-moi. J'ai corrigé l'itinéraire (id> sn), le second est une faute de frappe ici, et le troisième est déjà comment il est configuré. Cela produit toujours de vieilles URL. Je vais enquêter plus loin. –

+0

en êtes-vous sûr? J'ai testé celui-ci avant de le poster, et ça marche bien de mon côté. –

+0

Je viens de tester à nouveau pour vous assurer que je reçois:

  • LukeSkywalker
  • Dans la source. J'abandonne et j'utilise la norme. Sod it - n'a pas le temps. Si j'avais écrit MVC 2, j'aurais chaque action avec sa propre route définie via un attribut et aucune logique de correspondance floue. Bravo encore pour votre aide. Apprécié. –

    Questions connexes