ASP.NET MVC 3.0路由和传递参数

时间:2011-01-03 16:21:15

标签: asp.net asp.net-mvc

我正在尝试将参数传递给路线,但我很难过。我希望当我在URL中键入“Articles / 230”时,它应该调用Detail操作,如下所示:

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

我在Global.asax文件中有以下内容:

 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

           );

        }

以下是观点:

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

1 个答案:

答案 0 :(得分:2)

路线的顺序很重要,因为它们的评估顺序与它们的顺序相同。所以只能颠倒顺序:

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 }
    );
}

现在,当您请求Articles/123时,它会调用Detail控制器上的Articles操作,并将123作为id参数传递。