2011-12-20 13 views
0

異なるコントローラを参照する複数のルートがあり、いくつかのルートが同じパラメータ数を持っています。私のサンプルを見てください複数のルートと無効なデータルート値

routes.MapRoute("AdInfo", "{controller}/{action}/{AdGUID}/{UserID}/{Category}", 
    new 
    { 
     controller = "Home", 
     action = "DetailAd", 
     AdGUID = UrlParameter.Optional, 
     UserID = UrlParameter.Optional, 
     Category = UrlParameter.Optional 
    }); 

routes.MapRoute("PostAd", "{controller}/{action}/{MainCategory}/{SubCategory}/{SubCategoryGUID}", 
    new 
    { 
     controller = "Classified", 
     action = "Post", 
     MainCategory = UrlParameter.Optional, 
     SubCategory = UrlParameter.Optional, 
     SubCategoryGUID = UrlParameter.Optional 
    }); 

ルートAdInfoとPostAdには3つのパラメータがありますが、どちらもコントローラとアクションが異なります。 asp.net mvcが誤って解釈します。コントローラの分類にリンクすると思われるURLをクリックすると、ルートデータ値MainCategory、subcategory、およびsubcategoryGUIDのアクションポストが表示されます。何らかの形で、ルートデータ値はAdGUID、UserID、およびcategoryです。

この問題を解決する方法はありますか?

答えて

0

ほとんどの場合、基本的にはキャッチルートをすべて作成し、デフォルトを指定していますが、2つのキャッチオールルートの設定があります。

routes.MapRoute("AdInfo", "Home/{action}/{AdGUID}/{UserID}/{Category}", 
    new 
    { 
     controller = "Home", 
     action = "DetailAd", 
     AdGUID = UrlParameter.Optional, 
     UserID = UrlParameter.Optional, 
     Category = UrlParameter.Optional 
    }); 

routes.MapRoute("PostAd", "Classified/{action}/{MainCategory}/{SubCategory}/{SubCategoryGUID}", 
    new 
    { 
     controller = "Classified", 
     action = "Post", 
     MainCategory = UrlParameter.Optional, 
     SubCategory = UrlParameter.Optional, 
     SubCategoryGUID = UrlParameter.Optional 
    }); 

もちろん、状況によってはこれはうまくいかないでしょう。私も複数のコントローラのために、このルートを使用することができること見ることができる唯一の方法は、このようなコントローラの後に接尾辞を追加することです:アクションは常に同じになります2番目のルート上の

routes.MapRoute("AdInfo", "{Controller}/{action}/SomeNameThatSeperatesThisRouteFromTheNext/{AdGUID}/{UserID}/{Category}", 

場合や、そしてちょうどそれをハードコードして2つの別個のルートを持つようになります(ハードコードが他のルートの前に宣言されていることを確認してください)。

関連する問題