2017-11-03 6 views
-1

これは私のカスタムルートですが、RedirectToAction("action","controller");を使用するとエラーが発生します。 ルートテーブルのルートが、指定された値と一致しません。 私はいくつかの関連記事を訪問しましたが、解決できませんでした。どのように修正できますか?特定のアクションルートにリダイレクトする方法

routes.MapMvcAttributeRoutes(); 
routes.LowercaseUrls = true; 
routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}/{filter1}/{filter2}/{filter3}/{filter4}/{filter5}/{filter6}/{filter7}/{filter8}/{filter9}/", 
    defaults: new 
    { 
     controller = "Shop", 
     action = "Category", 
     id = UrlParameter.Optional, 
     filter1 = UrlParameter.Optional, 
     filter2 = UrlParameter.Optional, 
     filter3 = UrlParameter.Optional, 
     filter4 = UrlParameter.Optional, 
     filter5 = UrlParameter.Optional, 
     filter6 = UrlParameter.Optional, 
     filter7 = UrlParameter.Optional, 
     filter8 = UrlParameter.Optional, 
     filter9 = UrlParameter.Optional, 
    } 
); 
+1

どのように 'RedirectToAction( "アクション"、 "コントローラー"、新しい{ID = 0})'をしようとは? 'RedirectToAction'で定義されたアクションとルートが一致しないと思うので、複数のフィルター(または動的フィルター)を使用する場合は別のマッピングを作成する必要があります。 @ TetsuyaYamamoto tnx。 –

+0

それは働かなかった。別のマッピングフィルタを作成する方法 – Hamid

+1

そのルートは 'RouteConfig'の唯一のルートにマッピングされていますか?私の推測が正しいとすれば、複数のフィルタに対して単一のデフォルトルートを使用するのではなく、異なるフィルタを使用してルートを複数のマッピングに分割することを検討する必要があります。 –

答えて

1

私はRedirectToActionで一度同様の問題があったし、そのアクションにつながる登録されている有効なルートが必要であることが分かりました。あなたの場合、オプションのパラメータが予想以上の量であるため、エラーが発生しました。

私は、コードをテストし、それが動作します:

  routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}/{filter1}/{filter2}", 
      defaults: new 
      { 
       controller = "Employees", 
       action = "Index", 
       id = UrlParameter.Optional 
       ,filter1 = UrlParameter.Optional 
       ,filter2 = UrlParameter.Optional 
      }); 

あなたが最初RouteConfig.csRegisterRoutes方法にroutes.MapMvcAttributeRoutes();を追加で、あなたの行動の上に[Route("")]を使用することができ、独自のルートをしたい場合。その後、以下のように実行します。その後、

[Route("{TestEmployee}/{Index}/{id?}/{filter1?}/{filter2?}/{filter3?}/{filter4?}/{filter5?}/{filter6?}/{filter7?}/{filter8?}/{filter9?}")] 
    public ActionResult Index() 
    { 
     //do something 
    } 

あなたredirectToActionことができます:

return RedirectToAction("Index", "TestEmployee" ,routeValues: null); 
関連する問題