0

これはおそらく非常に単純なことですが、弱々しくグーグルで検索してもうまくいきません。

私たちが構築している Web アプリケーションには、プロジェクトとテンプレートがあります。テンプレートは、IsTemplate フラグが true に設定された単なるプロジェクトです。当然のことながら、両方のケースを処理する (または処理する) 単一の Project コントローラーが用意されています。

Newコントローラーのアクション メソッドへのルートが 1 つあります。

Project/New

それは、それ{controller}/{action}/{id}を処理する標準的なルートです。これで、Newアクション メソッドにIsTemplateパラメーターが追加されました。それが false として渡される 1 つのルート (上記のもの) と、true として渡される 2 つ目のルートが必要です。

Templates/New

そのようなさまざまな URL で任意のアクション メソッド パラメータをマスクする適切な方法は何ですか? 私は次のことを試しましたが、ルーティングを混乱させただけです(Html.ActionLink最終的には を指しますTemplates/New):

routes.MapRoute(
    null,
    "Template/New",
    new { controller = "Project", action = "New", IsTemplate = true }
);

それとも、これを 2 つのアクション メソッドに分割し、ハードコードされたパラメーター値を使用して単一のプライベート コントローラー メソッドを呼び出す方が簡単でしょうか?

4

2 に答える 2

1

これが最も簡単なオプションのようです。単一のアクション メソッドを 2 つのアクション メソッドに分割しましたNew。どちらも異なるルートが定義されており、3 つ目のプライベート メソッドがすべての作業を行います。もっときれいな方法があれば、私はまだ推奨事項を受け入れています。

[HttpGet]
//Action method for a new template
public ActionResult NewTemplate() {
    return New(true, null);
}

[HttpGet]
//Action method for a new project
public ActionResult New(int? TemplateProjectID) {
    return New(false, TemplateProjectID);
}

private ActionResult New(bool IsTemplate, int? TemplateProjectID) {
    //Assorted code follows
于 2013-10-28T19:26:18.530 に答える