4

首先请记住,我是 nop/mvc 的新手,尽管我尽了最大的努力,但无法找到解决这个看似简单的任务的方法。

我一直在为我正在制作的插件定义自定义路由,到目前为止一切正常。我定义的任何路线都没有问题(例如,我为“/Dealerlocator”和“Dealer/List”设置了路线)

问题来自这样一个事实,即已经为“/ Admin”定义了一个区域,所以当我尝试为“Admin/Dealer”之类的东西设置自定义路由时,据我所知,我的路由正在被解决区域而不是我的自定义路由。看起来我的控制器永远无法到达,因为它与区域路由使用的名称空间不同,并且我收到“找不到资源。”错误。

所以我想要发生的是,当我转到“Admin/Dealer”时,它会忽略这一原因中该区域中设置的路由,并使用我在 RouteProvider 类中定义的路由。

有人建议使用 DataTokens 来解决这个问题。但是我不能让他们工作。

我的插件路由代码:

   public partial class RouteProvider : IRouteProvider
{
    public void RegisterRoutes(RouteCollection routes)
    {
        var route = routes.MapRoute(
             "Nop.Plugin.Misc.DealersAdmin",
             "Admin/Dealer",
             new { controller = "DealerAdmin", action = "Index" },
             new[] { "Nop.Plugin.Misc.Dealers.Controllers" }
        );

        route.DataTokens.Add("Area", "Admin");
    }
} 

Nopcommerce的管理区域路由:

public class AdminAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Admin";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", area = "Admin", id = "" },
            new[] { "Nop.Admin.Controllers" }
        );
    }
}

如果控制器名为“经销商”,我尝试将区域注册的条件设置为不匹配,这似乎有效。但我无法更改 AdminAreaRegistration 类,因为它是核心 nop 框架的一部分。我希望看到在 RouteProvider 类中完成的所有工作。也许有一种方法可以将我的路线的优先级设置得更高,所以它是第一个解决的?谢谢。

4

1 回答 1

2

前段时间我也遇到过这个问题,它与路由优先级有关。这篇文章对我帮助很大

关于您的评论 - 您没有理由不能这样做,但或者,您可能更幸运地将您的路线定义为;

context.MapRoute(
  "DealerAdminDefault",
  "Dealer/Admin/{action}/{id}",
  new { controller = "DealerAdmin", action = "Index", id = UrlParameters.Optional }
);

希望这可以帮助,

马特

于 2011-11-09T15:20:54.770 回答