I’ve got the URL http://localhost:xyz/HelloWorld, which directs to the HelloWorld action in the Home controller.
On the page that renders at the URL, I have an Html.ActionLink that points to the same page (yes, a link to the page you are currently on).
The issue is that this link only points to the page if the page is loaded as http://localhost:xyz/HelloWorld/ (with trailing slash). If the page is loaded as http://localhost:xyz/HelloWorld (no slash), it directs to the Index action of the Home controller.
I’ve tried several overloads, but I can’t figure out what is causing this or how to fix it.
Html.ActionLink("Hello World", "HelloWorld", "Home");
Html.ActionLink("Hello World", "HelloWorld", "Home", null, null);
Html.ActionLink("Hello World", "HelloWorld", "Home", new { arg = 0 }, null);
These all have exactly the same result. They work fine if there is a trailing slash, and direct to http://localhost:xyz/ if there is not.
Can anyone explain this behavior or how to fix it?
EDIT (possibly relevant?):
When arg is present and not 0, the same page is shown at http://localhost:xyz/HelloWorld/arg, and has the “Hello World” link (which works perfectly fine), and a similar link that works flawlessly.
Html.ActionLink("Argument", "HelloWorld", "Home", new {arg = arg}, null);
This points to itself correctly, regardless of whether or not a trailing slash is present.
ROUTES:
routes.MapRoute(
"HomeStart",
"",
new { controller = "Home", action = "Index" }
);
routes.MapRoute(
"Hello World",
"HelloWorld/{arg}",
new {controller = "Home", action = "HelloWorld", arg = ""}
);
Problem solved. I separated the routes for with and without an argument.