質問

2つのオプションの引数を持つルートが必要です。次のように動作すると思いました:

routes.MapRoute(
    "ProductForm",
    "products/{action}/{vendor_id}_{category_id}",
    new { controller = "Products", action = "Index", vendor_id = "", category_id = "" },
    new { action = @"Create|Edit" }
);

ただし、 vendor_id category_id の両方が指定されている場合にのみ機能します。 RouteDebug を使用して / products / create / _3 がルートをトリガーしないので、他の2つのルートを追加しました:

routes.MapRoute(
    "ProductForm1",
    "{controller}/{action}/_{category_id}",
    new { controller = "Home", action = "Index", category_id = "" },
    new { controller = "Products", action = @"Create|Edit" }
);

routes.MapRoute(
    "ProductForm2",
    "{controller}/{action}/{vendor_id}_",
    new { controller = "Home", action = "Index", vendor_id = "" },
    new { controller = "Products", action = @"Create|Edit" }
);

だから、質問:

  • オプションの引数を使用してルートを作成する唯一の方法は3つのルートを使用していますか?

  • これらのURLは大丈夫ですか、つまり、これを行うためのより良い方法を提案しますか?

役に立ちましたか?

解決

vendor_idにデフォルト値(0が指定されていない場合)を与えて、1つのルートで逃げるのに役立つのはなぜですか

routes.MapRoute("ProductForm","products/{action}/{vendor_id}_{category_id}",
new { controller = "Products", action = "Index", vendor_id = "0", category_id = "" },   
new { action = @"Create|Edit" });

他のヒント

私には良さそうに見えますが、私は少し違うことをします:

routes.MapRoute(
"ProductForm1",
"product/category/{category_id}",
new { controller = "Home", action = "Index", category_id = "" },
new { controller = "Products", action = @"Create|Edit" }

);

そして

 routes.MapRoute(
"ProductForm1",
"product/details/{product_id}",
new { controller = "Home", action = "Index", product_id = "" },
new { controller = "Products", action = @"Create|Edit" }

);

その後、クラスは次のようになります:

ActionResults Index(){}
ActionResults Index(int category_id){// get categories}
ActionResults Index(int product_id){ // get products}

しかし、それは私だけです

次のように試すことができます:

routes.MapRoute(    
"ProductForm",
"products/{action}/{arg1}/{arg1_id}/{arg2}/{arg2_id}",    
new { controller = "Products", action = "Index", arg1 = "", arg2 = "", arg1_id = "", arg2_id = "" },
new { action = @"Create|Edit" });

その後、arg1とarg2をチェックし、引数が渡されたことを識別するために、actionresultメソッドでいくつかのロジックを作成します。

actionlinkのURLは次のようになります。

/products/create/vendor/10
/products/create/category/20
/products/create/vendor/10/category/20
/products/create/category/20/vendor/10

個人的には、ルートがあまりきれいに見えないので、これは好きではありませんが、あなたが達成したいと思うものを提供すべきですか?

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