2017-01-10 94 views
3

我在我的MVC應用程序中有類似Admin/Vendor的路由。在不改變這條路線的情況下,我需要將這條路線指向另一個方法CustomAdmin/CustomVendor如何覆蓋插件nopcommerce中的路由

我試過屬性路由,但沒有運氣。有沒有辦法做到這一點。我當前的代碼給出如下

原始的方法:

public class AdminController 
{ 
    public ActionResult Vendor() 
    { 
     return View(); 
    } 
} 

自定義方法:

public class CustomAdminController 
{ 
    [Route("Admin/Vendor")] 
    public ActionResult CustomVendor() 
    { 
     return View(); 
    } 
} 
+0

是否要在插件中覆蓋路由? –

+0

@Div yep我需要重寫我的插件 – Optimus

+0

好的,你能告訴我們你的插件的RouteProvider文件! –

回答

2

當你正在開發一個插件。您必須將自定義路線添加到RouteProvider

默認情況下,nopCommerce AdminControllerVendor不存在,所以我假設你試圖覆蓋管理員的供應商列表方法。

enter image description here

它看起來像:

public partial class RouteProvider : IRouteProvider 
{ 
    public void RegisterRoutes(RouteCollection routes) 
    { 
     var route = routes.MapRoute("Plugin.GroupName.PluginName.CustomVendor", 
            "Admin/Vendor/List", 
             new { controller = "CustomAdminController", action = "CustomVendor", orderIds = UrlParameter.Optional, area = "Admin" }, 
             new[] { "Nop.Plugin.GroupName.PluginName.Controllers" }); 
     route.DataTokens.Add("area", "admin"); 
     routes.Remove(route); 
     routes.Insert(0, route); 
    } 
    public int Priority 
    { 
     get 
     { 
      return 100; // route priority 
     } 
    } 
} 

側面說明:GroupNamePluginName應該是你的插件組名和插件名稱。

希望這會有所幫助!

1

在您的插件,它的類實現了接口IRouteProvider,你可以很容易地覆蓋路線那裏。 同樣我有一個名爲在我的插件RouteProvider類,所以我已經實現了abstract功能RegisterRoutes,只是它可以通過

routes.MapRoute("Plugin.Promotion.Combo.SaveGeneralSettings", 
       "Admin/Vendor", 
       new { controller = "CustomAdmin", action = "CustomVendor", }, 
       new[] { "Nop.Plugin.Promotion.Combo.Controllers" } 
      ); 

這裏Plugin.Promotion.Combo被overrided使用SaveGeneralSettings或任何東西directory.And必須由你的插件被替換你想使用那將是你的路線URL

+0

試過這個,但不工作 – Optimus

+0

你寫了'RegisterRoutes(RouteCollection routes)'函數內部的代碼部分? – gdmanandamohon

+0

是的。但仍然路由到舊的控制器行動 – Optimus