質問

MVCアプリで次の2つのルートが定義されています。 現在、「MVCビューコンテンツページ」が2つあります。定義済み

/ShowName/NameById
/ShowName/Index

ただし、これら2つのページのコンテンツは同一ですか? 2つのルートで同じコンテンツページを共有することは可能ですか?そうでない場合は、a)両方のルートに対して単一のルールを作成するか、b)データを表示するために両方のコンテンツページ間で共有するユーザーコントロールを作成する必要がありますか?

    routes.MapRoute(
       "NameById",
       "Name/{theName}/{nameId}",
        new
        {
            action = "NameById",
            controller = "ShowName",
            theName = "Charley"
        }
        ,new { nameId = @"\d+" }
   );

    routes.MapRoute(
       "ShowName",
       "Name/{theName}",
        new
        {
            action = "Index",
            controller = "ShowName",
            theName = "Charley"
        }
   );

編集 以下の回答を読んでおり、次のアクション結果メソッドがあります。メソッドの1つ(インデックスなど)を削除した場合、ルートを1つのルートに書き換える方法を教えてください

public ActionResult Index(string theName)
public ActionResult NameById(string theName, int? nameId)

だから、次の作品はURLの作品ですか?

/Name/Charley
/Name/Charley/11234
役に立ちましたか?

解決

本当に2つの異なるルートが必要ですか?インデックスルートのパターンを作成できます

Name/{theName}/{nameId}

そして nameId をアクションへのnull入力可能にします。次に、nameIdに値があるかどうかを確認し、それに応じて動作するロジックをアクションに追加します。

他のヒント

2つのアクションが後で変更された場合に備えて、ページの詳細領域の部分ビューを作成して、2つのアクションを分離できます。または、あなたはただ

return View("DetailView", model);

ただし、2つのコントローラーアクション間を管理するための追加の文字列を導入できます。 MVCはアクション名によるオーバーロードをサポートしていないので(引数のないGET / POSTのペアがない限り)、{nameId}パラメーターをチェックして、使用する前に空かnullかを確認できます。

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