我正在尝试将参数传递给路线,但我很难过。我希望当我在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>
答案 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
参数传递。