The question is similar to asp.net mvc Html.ActionLink() keeping route value I don't want, but with a twist that makes it more complex.
Starting from a default n
To solve it in this case is quite easy if yo don't care how it's solved.
Change the third link to:
@Url.RouteUrl("R2")
which gives me:
Why it happends in the first case is something I have yet to figure out. I have been bitten by this too but mostly when it comes to forms.
UPDATE 1:
I was digging around the MVC source and created a few tests that reproduced this problem. The problem seems to be when
RouteCollection.GetVirtualPath(requestContext, correctedValues);
is run. It creates a querystring with the old id. Exactly why I couldn't tell as that class isn't located in the MVC source.