johndoe
johndoe

Reputation: 65

ASP.NET MVC 3.0 Routes and Passing Parameters

I am trying to pass parameters to the route but I am having a hard time. I want that when I type "Articles/230" in the URL it should invoke the Detail action as shown below:

 public ActionResult Detail(int id)
       {
           return View();
       }

I have the following in my Global.asax file:

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

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


            );

            routes.MapRoute(
               "ArticleDetails", // Route name
               "Articles/{id}", // URL with parameters
               new { controller = "Articles", action="Detail", id = 0 } // Parameter defaults

           );

        }

And here is the view:

@foreach(var article in Model) 
{
    <div class="article_title">
   @Html.ActionLink(@article.Title, "Detail", "Articles", new { id = @article.Id})
    </div>
    <div>
    @article.Abstract
    </div>

Upvotes: 0

Views: 2957

Answers (1)

Darin Dimitrov
Darin Dimitrov

Reputation: 1039418

The order of routes is important because they are evaluated in the same order they are defined. So oimply invert the order:

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

    routes.MapRoute(
        "ArticleDetails",
        "Articles/{id}",
        new { controller = "Articles", action = "Detail", id = 0 }
    );

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Articles", action = "Index", id = UrlParameter.Optional }
    );
}

Now when you request Articles/123 it will invoke the Detail action on the Articles controller and pass 123 as the id parameter.

Upvotes: 2

Related Questions