是否可以在MVC中添加路由到RouteCollection?

时间:2012-08-24 14:11:10

标签: sql-server asp.net-mvc asp.net-mvc-routing

我想不出这篇文章的合理标题。

我遇到的问题是我的MVC网站附有一个SQL数据库。在我的网站上,我有一个新闻/博客系统,我已将其存储在数据库中,并根据请求提取信息。

问题在于路由。我目前已将其设置为提取有关每个页面的路由的信息,如下所示:

  

var newsr = new NewsResources();

     

foreach(newsr.GetAllNewsItems()中的var项目)   {       item.Title = item.Title.Replace('',' - ')。ToLower();

routes.MapRoute(item.Title, "News/" + item.Title,
new {controller = "News", action = "Post", id = item.ID});}

但是,当我添加新的新闻时,这不会进入路由系统,这被证明是一个正确的痛苦。我有一个谷歌搜索动态添加网址路由,但我似乎无法找到解决方案。

我想知道的是,将帖子保存到数据库后,是否可以通过页面控制器向路由系统添加页面?

2 个答案:

答案 0 :(得分:3)

我认为您不需要在所有PO项目中执行For Each循环并为其添加路由。你可以这样做

public static void RegisterRoutes(RouteCollection routes)
{
     routes.MapRoute("SingleItem", "News/{title}",
             new { controller = "Items", action = "PostFromTitle" });

     // and the generic route
     routes.MapRoute(
            "Default", 
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", 
                                  id = UrlParameter.Optional } 
        );

}

这会将../News/SomeTitle请求发送到您PostFromTitle NewsController的{​​{1}}操作方法。阅读那里的标题并从那里得到帖子。

public ActionResult PostFromTitle(string title)
{
  var post=repo.GetPostFromTitle(title);
  return View("~/Views/News/Post.cshtml",post);
}

答案 1 :(得分:0)

将标题作为参数的动作可能会更好。

routes.MapRoute("NewsItem", "News/{title}", 
    new { controller = "News", action = "ShowNews"  }