如何在ASP.NET MVC中拥有类似此controller / action / id / string的路由

时间:2013-05-15 18:08:41

标签: asp.net asp.net-mvc asp.net-mvc-4 routing controller

我有一个看起来像这样的动作结果:

public ActionResult Comment(int id)
{
    var news = re.GetNewsByID(id);
    NewsViewModel model = new NewsViewModel();

    model.Description = news.Description;
    model.Imageurl = news.Image;
    model.link = news.Link;
    model.PubDate = news.Date;
    model.Title = news.Title;

    return View(model);
}

并在我声明的视图中:

@Html.ActionLink("Comment", "Comment", new { id = item.Title })

当我点击actionlink时,我会看到以下网址:

Home/Comment/403

但我希望它以item.title结束。

这样的事情:

Home/Comment/403/What-ever-the-item-title-contains

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

我会在我的路线集合中首先映射该路线:

routes.MapRoute(
  name: "Title",
  url: "{controller}/{action}/{id}/{title}",
  defaults: new { controller = "Home", action = "Index", id = 0, title = UrlParameter.Optional }
        );

确保此路线映射到您的默认路线。一旦你有了这个,那就做:

@Html.ActionLink("Comment", "Comment", new { id = item.Id, title = item.Title })

就此而言,您可能只想让您的默认路线看起来像我上面的路线。不需要2条路线,因为ID和标题都是可选的。

答案 1 :(得分:0)

我从来不知道如何从Html.ActionLink开始,我总是这样使用Url.Action

<a href="@Url.Action("Comment", new { id = item.Title })/@theTermToAddHere">Comment</a>

注意href中的“/”是标记(不是Razor代码的一部分),然后我追加附加术语。