2012-02-15 89 views
2

我是MVC3的新手,無法解決此問題。 我正在製作一個簡單的博客帖子,分爲不同的類別,每個帖子可能有一些標籤。 如果我向用戶顯示帖子,我在那裏尋呼,其中url就像localhost/Posts/1,其中「1」是頁面的編號。 但我怎麼能做到這一點,如果我想顯示帖子只從某個類別或與一些標籤? 它的格式爲localhost/Posts/Categories/1,其中「1」是類別或localhost/Posts/Tags/tag1的id其中「tag1」是特定標記 我想將其全部更改爲localhost格式/ Posts/Page/1或localhost/Posts/Categories/1/Page/1或localhost/Posts/Tags/tag1/Page/1,但我真的無法知道如何在控制器中實現此目的。 所以我的問題是:如何使控制器中的方法接受這些複雜的URL?C#中的複雜URL MVC3

我想它與路由有關,但找不到我的問題的任何解釋。

非常感謝您的幫助。

我的代碼:

public ActionResult Tags(string id) 
{ 
    Tag tag = GetTag(id); 
    ViewBag.IdUser = IDUser; 
    if (IDUser != -1) 
    { 
    ViewBag.IsAdmin = IsAdmin; 
    ViewBag.UserName = model.Users.Where(x => x.IDUser == IDUser).First().Name; 
    } 
    return View("Index", tag.Posts.OrderByDescending(x => x.DateTime)); 
} 

public ActionResult Index(int? id) 
{ 
    int pageNumber = id ?? 0; 
    IEnumerable<Post> posts = 
      (from post in model.Posts 
      where post.DateTime < DateTime.Now 
      orderby post.DateTime descending 
      select post).Skip(pageNumber * PostsPerPage).Take(PostsPerPage + 1); 
    ViewBag.IsPreviousLinkVisible = pageNumber > 0; 
    ViewBag.IsNextLinkVisible = posts.Count() > PostsPerPage; 
    ViewBag.PageNumber = pageNumber; 
    ViewBag.IdUser = IDUser; 
    if (IDUser != -1) 
    { 
    ViewBag.IsAdmin = IsAdmin; 
    ViewBag.UserName = model.Users.Where(x => x.IDUser == IDUser).First().Name; 
    } 
    return View(posts.Take(PostsPerPage)); 
    } 

回答

2

創建新的路線指導那些URL模式到控制器(或其他位指示,如適用)

例如,該路由定義

routes.MapRoute(
       "CategoryPage",            // Route name 
       "Posts/Categories/{CategoryID}/Page/{PageID}",       // URL with parameters 
       new { controller = "Home", action = "ViewPage", CategoryID = "", PageID="" } // Parameter defaults 
      ); 

會被這個動作拾取在HomeController的:

public ActionResult ViewPage(int CategoryID, int PageID) 
+0

非常感謝,這就是我認爲這是應該的,但好像我採用的參數錯誤。 – Petr 2012-02-15 14:25:10

+0

在我對整個路線事情感到滿意之前,我花了相當多的時間搞亂了設計選擇 - 這與我之前做過的事情截然不同。如果你有特定的路線給你帶來麻煩,那麼SO上的某個人可以提供幫助。 – Dave 2012-02-15 14:32:40