0

この投稿に適切なタイトルが思いつきませんでした。

私が抱えている問題は、MVC Web サイトに SQL データベースが接続されていることです。Web サイト内には、データをデータベースに保存し、要求に応じて情報を引き出すニュース/ブログ システムがあります。

問題はルーティングです。現在、個々のページのルーティングに関する情報を次のように取得するように設定しています。

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ルーティングを動的に追加するためのGoogle検索がありましたが、解決策が見つからないようです。

私が知りたいのは、投稿をデータベースに保存した後、ページコントローラーを介してルーティングシステムにページを追加することは可能ですか?

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 に答える