46 votes

asp.net mvc Html.ActionLink () conservant la valeur de l'itinéraire je ne veux pas

J'ai le texte suivant ActionLink de mon point de vue

<%= Html.ActionLink("LinkText", "Action", "Controller"); %>

et il crée l'URL suivante http://mywebsite.com/Controller/Action

Dis-je ajouter un ID à la fin de la sorte: http://mywebsite.com/Controller/Action/53 et accédez à la page. Sur cette page, j'ai le balisage que j'ai précisé ci-dessus. Maintenant, quand je regarde l'URL, il crée, il ressemble à ceci:

http://mywebsite.com/Controller/Action/53 (remarquer l'ajout de l'ID)

Mais je le veux pour enlever les ID et regardez comme il l'a fait à l'origine, comme ceci http://mywebsite.com/Controller/Action (avis n ° ID ici)

Des idées comment je peux résoudre ce problème? Je ne veux pas utiliser des Url codées depuis mon contrôleur/actions peuvent changer.

48voto

codette Points 2334

La solution consiste à spécifier mes propres valeurs de route (le troisième paramètre ci-dessous)

 <%= Html.ActionLink("LinkText", "Action", "Controller", 
    new { id=string.empty }, null) %>
 

13voto

Brian Cauthon Points 4031

Il semble que vous ayez besoin d'enregistrer une deuxième route "Action uniquement" et d'utiliser Html.RouteLink (). Enregistrez d'abord un itinéraire comme celui-ci dans le démarrage de votre application:

 routes.MapRoute("ActionOnly", "{controller}/{action}", 
   new { controller = "Home", action = "Index" } );
 

Ensuite, au lieu d'ActionLink pour créer ces liens, utilisez:

 Html.RouteLink("About","ActionOnly")
 

10voto

Garry Shutler Points 20898

Le problème est que les méthodes intégrées prennent en compte l'URL sur laquelle vous vous trouvez actuellement ainsi que ce que vous fournissez. Vous pouvez essayer ceci:

 <%= Html.ActionLink("LinkText", "Action", "Controller", new { id = ""}) %>
 

Cela devrait effacer manuellement le paramètre id.

4voto

Arnis L. Points 18316

Je ne sais pas pourquoi, mais cela n'a pas fonctionné pour moi (peut-être à cause de Mvc2 RC). Méthode urlhelper créée =>

  public static string
            WithoutRouteValues(this UrlHelper helper, ActionResult action,params string[] routeValues)
        {
            var rv = helper.RequestContext.RouteData.Values;
            var ignoredValues = rv.Where(x=>routeValues.Any(z => z == x.Key)).ToList();
            foreach (var ignoredValue in ignoredValues)
                rv.Remove(ignoredValue.Key);
            var res = helper.Action(action);
            foreach (var ignoredValue in ignoredValues)
                rv.Add(ignoredValue.Key, ignoredValue.Value);
            return res;
        }
 

3voto

Murilo Lima Points 92

Une autre façon consiste à utiliser la surcharge ActionLink (HtmlHelper, String, String, RouteValueDictionary), puis il n'est pas nécessaire de mettre null dans le dernier paramètre

 <%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X