2

私はMVCベータ版を使用して、ASP.NetMVCを理解するための簡単なアプリケーションを作成しています。このアプリケーションは、タグ付けされたシンプルな写真/ビデオ共有サイトです。私はMVCスケルトンプロジェクトに取り組んでいます。ナビゲーションバーにいくつかのHtml.ActionLink()を追加しましたが、1つの場所に追加したHtml.ActionLink()の1つに問題があります。

〜/ Tagsにデータベースのすべてのタグを表示させ、〜/ Tags/{tag}に{tag}でタグ付けされたすべてのファイルのリストを表示させたい。これは期待どおりに機能しますが、〜/ Tags / {tag}をたどると、ナビゲーションバーのHtml.ActionLink()が、〜を指すのではなく、〜/ Tags/{tag}リンクと同じになるように変更されます。 /タグ。〜/ Tags / {tag}をたどると、ナビゲーションバーのActionLink()が変化する理由がわかりません。プロジェクト内の別のリンクに移動すると、ActionLink()は期待どおりに機能します。

アクションリンクとルートをこのように設定しました。私のTagsControllerにはこのインデックスアクションがあります。int?ページング制御用です。2つのビューがあります。1つはAllと呼ばれ、もう1つはDetailsと呼ばれます。私は何が間違っているのですか?

        Html.ActionLink("Tags", "Index", "Tags") // In navigation bar

        routes.MapRoute(
            "Tags",
            "Tags/{tag}",
            new
            {
              controller = "Tags", action = "Index", tag = "",
            });

        public ActionResult Index(string tag, int? id )
        {  // short pseudocode
           If (tag == "")
             return View("All", model)
           else
             return View("Details", model) 
        }
4

3 に答える 3

4

タグが含まれているインスタンスのみを処理しているため、yoursite.com/Tags/ のインスタンスを処理する必要があると思います。

別のルートを作成します。

routes.MapRoute(
  "TagsIndex", //Called something different to prevent a conflict with your other route
  "Tags/",
  new { controller = "Tags", action = "Index" }
);

routes.MapRoute(
  "Tags",
  "Tags/{tag}",
  new { controller = "Tags", action = "Tag", tag = "" }
);


/* In your controller */
public ActionResult Index() // You could add in the id, if you're doing paging here
{
  return View("All", model);
}

public ActionResult Tag(string tag, int? id)
{
  if (string.IsNullOrEmpty(tag))
  {
    return RedirectToAction("Index");
  }

  return View("Details", model);
}
于 2009-01-05T11:11:34.330 に答える
2

Dan Atkinson が言及しているように追加のルートを作成することに加えて、コントローラーの if ステートメントを取り除き、タグの詳細を処理する別のコントローラー メソッド (Details と呼ばれる) を作成する必要もあります。表示するビューを決定するためのコントローラー内の if ステートメントは、コードの匂いです。ルーティング エンジンに仕事を任せれば、コントローラーのコードはよりシンプルで保守しやすくなります。

于 2009-01-05T14:08:26.390 に答える
0

これを処理するためにラムダ式を調べることをお勧めします。将来、「タグスープ」になる可能性があります。

また、System.Web.Mvc とは異なる Microsoft.Web.Mvc dll をダウンロードしたことを確認してください。

Microsoft.Web.Mvc.dll の入手先

于 2009-01-05T12:02:27.907 に答える