質問

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

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

このように設定されたアクションリンクとルートがあります。 My TagsControllerにはこのIndexアクションがあります。 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) 
        }
役に立ちましたか?

解決

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);
}

他のヒント

ダンアトキンソンが述べているように追加のルートを作成することに加えて、コントローラーのifステートメントを削除し、タグの詳細を処理する別のコントローラーメソッド(詳細)を作成する必要があります。どのビューを表示するかを決定するコントローラーのifステートメントがコードの匂いです。ルーティングエンジンに任務を任せると、コントローラーコードのメンテナンスがより簡単で簡単になります。

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

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

Microsoft.Web.Mvc.dllの入手先

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top