2012-02-15 18 views
2

私はMVC3に新しいですし、この問題に移動することはできません。 私はポストを持つ簡単なブログを作っています。ポストはカテゴリに分かれていて、各投稿にはいくつかのタグがあるかもしれません。 私は、ユーザーへの投稿を表示した場合は、URLが「1」は、ページの数である、ローカルホスト/投稿/ 1と同様であり、私は、そこにページングを持っています。 しかし、私はいくつかのカテゴリまたはいくつかのタグからだけ投稿を表示したい場合、これを行うことはできますか? それは「1」が、私はフォーマットのローカルホストにあるようにそれをすべて変更したいカテゴリまたは「TAG1」とは、特定のタグ ではlocalhost /記事/タグ/タグ1のIDであり、フォーマットはlocalhost /記事/カテゴリー/ 1であります/ posts/Page/1またはlocalhost/Posts/Categories/1/Page/1またはlocalhost/Posts/Tags/tag1/Page/1を使用してください。 私の質問は:どのようにコントローラでこれらの複雑なURLを受け入れるためのメソッドを作るのですか?複雑なURL

私はそれがルーティングとは何かを持っていると思いますが、私の問題のいずれかの説明を見つけることができませんでした。任意の助け

おかげで多くのことを。

マイコード:

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

は、例えば

(必要に応じて、または別のcontoller)あなたのコントローラにそれらの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

+0

私は、路線全体を本当に快適に過ごす前に、ちょっと迷ってしまい、デザインの選択が間違っていました。あなたに問題を起こしている特定のルートがある場合は、SOの誰かが助けてくれるでしょう。 – Dave