0

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

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

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

var newsr = new NewsResources();

foreach (var item in newsr.GetAllNewsItems()) { item.Title = item.Title.Replace(' ', '-').ToLower();

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

然而,当我添加一个新的新闻项目时,这并没有进入路由系统,这被证明是一个正确的痛苦。我有一个谷歌搜索动态添加 url 路由,但我似乎找不到解决方案。

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

4

2 回答 2

3

我认为您不需要在所有 POst 项目中执行 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。阅读那里的标题并从那里获取帖子。

public ActionResult PostFromTitle(string title)
{
  var post=repo.GetPostFromTitle(title);
  return View("~/Views/News/Post.cshtml",post);
}
于 2012-08-24T14:32:28.420 回答
0

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

routes.MapRoute("NewsItem", "News/{title}", 
    new { controller = "News", action = "ShowNews"  }  
于 2012-08-24T14:30:56.010 回答