2016-07-08 4 views
1

私はC#MVCを使用しています。C#MVC動的に指定されたルートを固定アクションにリダイレクト

私はこのような行動をしています。

public class CustomController : Controller 
    { 
     public ActionResult CustomPage(int customPageId) 
     { 
      var model = new CustomPageViewModel() 
      { 
       customPageId = customPageId 
      }; 

      return View(model); 
     } 
    } 

私はこのアクションを打つことができますが、別のルートを使用したいと思います。たとえば、ホーム/インデックスで実際にこのアクションを実行し、そのホーム/インデックスがURLに記録されるようにしたいとします。

私のカスタムページはデータベースに保存されているため、どのような経路を持つかを教えてくれます。プログラムでルートを作成し、MVCに必要なアクションを実行させるにはどうしたらいいですか?

これはCMSベースのシステムなので、ユーザは任意のルートを選択できるため、Home/Indexコントローラとアクションを作成する必要はありません。

ありがとう、Tom

答えて

0

FYI:これはわかりました。残念ながら、アプリケーションの起動時にルートが定義されているため、アプリケーションの実行中に新しいルートを設定する場合は強制的に再起動する必要があります。

ここでは、他の人は。

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     var pageList = new PageService().Get(); 

     foreach (var page in pageList) 
     { 
      var targetRoute = string.Format("{1}/{2}", page.PageArea, page.PageController, page.PageAction); 

      if (!string.IsNullOrWhiteSpace(page.PageArea)) 
       targetRoute = string.Format("{0}/{1}/{2}", page.PageArea, page.PageController, page.PageAction); 

      routes.MapRoute(
       string.Format("PageBuilder_{0}", page.PageId), 
       targetRoute, 
       new { area = "Builder", controller = "Build", action = "Index", pageId = page.PageId } 
      ); 
     } 

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

実行時にルートコレクションを変更するのではなく、1つ以上の[データ駆動型ルート](http://stackoverflow.com/a/31958586/181087)を使用することをお勧めします。 – NightOwl888

関連する問題