Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 488139
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T01:40:36+00:00 2026-05-13T01:40:36+00:00

The website I’m working on has some fairly complicated routing structures and we’re experiencing

  • 0

The website I’m working on has some fairly complicated routing structures and we’re experiencing some difficulties working with the routing engine to build URLs the way we need them to be built.

We have a search results page that uses RegEx based pattern matching to group several variables into a single route segment (i.e. “www.host.com/{structuralParameters}” can be the following: “www.host.com/variableA-variableB-variableC” – where variables A through C are all optional). This is working for us fine after a bit of work.

The problem we are experiencing resolves around an annoying feature of the ActionLink method: if you point to the same controller/action it will retain the existing route values whether you want them or not. We prefer to have control over what our links look like and, in some cases, cannot have the existing parameters retained. An example would be where our site’s main navigation leads to a search results page with no parameters set – a default search page, if you like. I say this is an annoying feature because it is a rare instance of the ASP.Net MVC Framework seemingly dictating implementation without an obvious extension point – we would prefer not to create custom ActionLink code to write a simple navigation link in our master page!

I’ve seen some say that you need to explicitly set such parameters to be empty strings but when we try this it just changes the parameters from route values into query string parameters. It doesn’t seem right to me that we should be required to explicitly exclude values we aren’t explicitly passing as parameters to the ActionLink method but if this is our only option we will use it. However at present if it is displaying in the query string then it is as useless to us as putting the parameters directly into the route.

I’m aware that our routing structure exasperates this problem – we probably wouldn’t have any issue if we used a simpler approach (i.e. http://www.host.com/variableA/variableB/variableC) but our URL structure is not negotiable – it was designed to meet very specific needs relating to usability, SEO, and link/content sharing.

How can we use Html.ActionLink to generate links to pages without falling back on the current route data (or, if possible, needing to explicitly excluding route segments) even if those links lead to the same action methods?

If we do need to explicitly exclude route segments, how can we prevent the method from rendering the routes as query string parameters?

This seemingly small problem is causing us a surprising amount of grief and I will be thankful for any help in resolving it.

EDIT: As requested by LukLed, here’s a sample ActionLink call:

// I've made it generic, but this should call the Search action of the 
// ItemController, the text and title attribute should say "Link Text" but there
// should be no parameters - or maybe just the defaults, depending on the route.
// 
// Assume that this can be called from *any* page but should not be influenced by
// the current route - some routes will be called from other sections with the same
// structure/parameters.
Html.ActionLink( 
    "Link Text",
    "Search", 
    "Item", 
    new { }, 
    new { title = "Link Text" } 
);
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T01:40:36+00:00Added an answer on May 13, 2026 at 1:40 am

    Setting route values to be null or empty string when calling Html.ActionLink or Html.RouteLink (or any URL generation method) will clear out the “ambient” route values.

    For example, with the standard MVC controller/action/id route suppose you’re on “Home/Index/123”. If you call Html.RouteLink(new { id = 456 }) then MVC will notice the “ambient” route values of controller="Home" and action="Index". It will also notice the ambient route value of id="123" but that will get overwritten by the explicit “456”. This will cause the generated URL to be “Home/Index/456”.

    The ordering of the parameters matters as well. For example, say you called Html.RouteLink(new { action = "About" }). The “About” action would overwrite the current “Index” action, and the “id” parameter would get cleared out entirely! But why, you ask? Because once you invalidate a parameter segment then all parameter segments after it will get invalidated. In this case, “action” was invalidated by a new explicit value so the “id”, which comes after it, and has no explicit value, also gets invalidated. Thus, the generated URL would be just “Home/About” (without an ID).

    In this same scenario if you called Html.RouteLink(new { action = "" }) then the generated URL would be just “Home” because you invalidated the “action” with an empty string, and then that caused the “id” to be invalidated as well because it came after the invalidated “action”.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

No related questions found

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.