asp.net mvc Html.ActionLink () maintien de la valeur de la route, je ne veux pas

StackOverflow https://stackoverflow.com/questions/780643

  •  13-09-2019
  •  | 
  •  

Question

Je le ActionLink suivant à mon avis

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

et il crée href="http://mywebsite.com/Controller/Action" rel="noreferrer"> http://mywebsite.com/Controller/Action l'adresse suivante

Dire que j'ajouter une carte d'identité à la fin comme ceci: http://mywebsite.com/Controller/Action / 53 et accédez à la page. Sur cette page, je le balisage je spécifié ci-dessus. Maintenant, quand je regarde l'URL, il crée ressemble à ceci:

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

Mais je veux supprimer l'ID et regardez comme il le faisait à l'origine, comme cette http://mywebsite.com / contrôleur / action (notez pas ID ici)

Toutes les idées comment je peux résoudre ce problème? Je ne veux pas utiliser des URL codés en dur depuis mon contrôleur / actions peut changer.

Était-ce utile?

La solution

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) %>

Autres conseils

On dirait que vous avez besoin d'enregistrer une deuxième voie « Action seulement » et utiliser Html.RouteLink (). enregistrer d'abord une route comme celui-ci dans votre application de démarrage:

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

Alors, au lieu de ActionLink pour créer ces liens utiliser:

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

Le problème est intégré dans les méthodes prennent entrée de l'URL que vous êtes actuellement aussi bien que ce que vous fournissez. Vous pouvez essayer ceci:

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

Cela devrait effacer manuellement le paramètre id.

Je ne sais pas pourquoi, mais cela n'a pas fonctionné pour moi (peut-être à cause de MVC2 RC). Créé urlhelper method =>

 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;
        }

Si vous ne savent pas quelles valeurs doivent être explicitement redéfinis vous voulez juste pour éviter la liste supplémentaire des paramètres que vous pouvez utiliser une méthode d'extension comme ci-dessous.

<a href="@Url.Isolate(u => u.Action("View", "Person"))">View</a>

Les détails de mise en œuvre sont dans ce blog

Je définir explicitement le nom d'action "Action /". Semble un peu comme un hack, mais il est une solution rapide.

@Html.ActionLink("Link Name", "Action/", "Controller")

Une autre façon est d'utiliser ActionLink (HtmlHelper, String, String, RouteValueDictionary) surcharge, alors il n'y a pas besoin de mettre nulle dans le dernier paramètre

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

Les surcharges de Html.ActionLink sont modifiées sur les versions ultérieures de MVC. Le MVC 5 et au-dessus. Voici comment faire ceci:

@Html.ActionLink("LinkText", "Action", "Controller", new { id = "" }, null)

Note je suis passé "" pour le paramètre id et null pour htmlAttributes.

Je besoin de mes liens de menu pour être dynamique. Plutôt que de mettre en œuvre beaucoup de code et de routage supplémentaire pour chaque simple et unique page I distribué avec l'aide HTML.

<a href="@(item.websiteBaseURL)/@(item.controller)/@(item.ViewName)">@item.MenuItemName</a>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top