2017-09-18 15 views
0

MVC 4アプリケーションで作業しています。私の問題は、特定のコントローラのURLはhttp://domain/category/clothing/1256、またはhttp://domain/category/clothing/shirts/formal/128 'となります。ご覧のとおり、URLの深さは変わりますが、すべてがカテゴリコントローラにルーティングされなければなりません。動的URLのルート設定

URLの最大部がわからないので、パラメータがいつ来るかわからないので、User Routeconfigを使用できません。

routes.MapRoute(
    name: "Category", 
    url: "Category/{ignore}/{id}/{SubCatId}/{SubSubCatId}", 
    defaults: new { controller = "Category", action = "Index", CatId = UrlParameter.Optional, SubCatId = UrlParameter.Optional, SubSubCatId = UrlParameter.Optional }, 
    namespaces: new[] { "CSPL.B2C.Web.Controllers" }, 
    constraints: new { id = @"\d+" } 
); 

上記のコードは、1つのレベルのアカウントとして機能しません。

public ActionResult Index(string id, string SubCatId, string SubSubCatId) 
{ 
    return view(); 
} 
+0

あなただけ持つことができます最後のパラメータは 'UrlParameter.Optional'とマークされています。そしてあなたのルート定義にも存在しない3つのパラメータ 'CatId'、' ChildCatId'、 'viewtype'を参照してください) –

+0

yupが変更されました。それでもIdを正しく取得する方法 –

+0

別のルート定義を(同じコントローラに対して)作成する必要がありますが、どのオプションが必要かわからず、メソッドのシグネチャが表示されていません –

答えて

0

あなたの唯一のオプションは、キャッチオールのparamであるカテゴリのコントローラのこの

Indexメソッドを達成するためにどのように任意のアイデア。しかし、その2つの注意点があります:

  1. キャッチオールparamは手動で解析する必要がありますので、キャッチオールparamは、/を含むすべてのものを、飲み込むだろうルート
  2. の最後の部分でなければなりませんあなたが必要とする個々のビットを正規表現などで出力します。

基本的に、あなただけへのルートを変更します:次に、あなたの行動は、この新しいのparamを受け入れるように変更する必要があります

​​

public ActionResult Index(string path) 
{ 
    // parse path to get the data you need: 

    return view(); 
} 
+0

これもうまくいきましたが、こちらの回答はhttps://stackoverflow.com/questions/31934144/multiple-levels-in-mvc-custom-routingが良くなりました –

関連する問題