オプションの引数を持つASP.NET MVCカスタムルート
-
05-07-2019 - |
質問
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
個人的には、ルートがあまりきれいに見えないので、これは好きではありませんが、あなたが達成したいと思うものを提供すべきですか?
所属していません StackOverflow