user1006544
user1006544

Reputation: 1524

Html.actionlink is not generating correct url

My route in global.asax in like this-

 routes.MapRoute(
            "History", // Route name
            "{controller}/{PageID}/{LanguageID}/{PreviousRevisionID}/{NewRevisionID}", // URL with parameters
            new { controller = "UserArea", action = "Index", PageID = 0, LanguageID = 0, PreviousRevisionID = 0, NewRevisionID = 0} // Parameter defaults
        );

I am using Html.actionLink to make url Like this.

@Html.ActionLink(item.CreatedTS.ToString(), "Index", new { PageID = item.PageID ,LanguageID = item.LanguageID , PreviousRevisionID = item.PreviousRevisionID , NewRevisionID = item.NewRevisionID , controller = "History" });

But the url generate like This

http://localhost:2582/History?PageID=2&LanguageID=3&PreviousRevisionID=98&NewRevisionID=103

But I want url Like this

http://localhost:2582/History/2/3/98/103

Where is the problem

Upvotes: 3

Views: 2144

Answers (2)

nemesv
nemesv

Reputation: 139748

Use RouteLink instead of ActionLink:

@Html.RouteLink(item.CreatedTS.ToString(), "History", new { PageID = item.PageID ,LanguageID = item.LanguageID , PreviousRevisionID = item.PreviousRevisionID , NewRevisionID = item.NewRevisionID , controller = "History" });

For the differences see this SO question.

Upvotes: 4

Justin
Justin

Reputation: 512

It seems that you may have your routes defined in the wrong order. You want this route to be defined before the default route. So your routes may look something like this.

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "History", // Route name
            "{controller}/{PageID}/{LanguageID}/{PreviousRevisionID}/{NewRevisionID}", // URL with parameters
            new { controller = "UserArea", action = "Index", PageID = 0, LanguageID = 0, PreviousRevisionID = 0, NewRevisionID = 0 } // Parameter defaults
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Default", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

The route debugger utility by Phil Haack is very helpful for debugging routes.

http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

PM> Install-Package routedebugger

Upvotes: 0

Related Questions