asp.net-mvc-3 - Asp.Net MVC 3 - 映射已经属于某个区域的单独路线

标签 asp.net-mvc-3 routes asp.net-mvc-routing asp.net-mvc-areas nopcommerce

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

我一直在为我正在制作的插件定义自定义路由,到目前为止一切进展顺利。我定义的任何路线都可以正常工作(例如,我为“/Dealerlocator”和“Dealer/List”设置了路线)

问题来自于这样一个事实,即已经为“/Admin”定义了一个区域,因此当我尝试为“Admin/Dealer”之类的内容设置自定义路线时,从我可以看出我的路线正在由区域而不是我的自定义路由解析。看起来我的 Controller 从未到达,因为它位于与区域路由使用的命名空间不同的命名空间中,并且我收到“找不到资源。”错误。

所以我希望发生的是,当我转到“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" }
        );
    }
}

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

最佳答案

我前段时间也遇到过这个问题,是与路由优先级有关。 This post helped me alot .

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

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

希望这有帮助,

马特

关于asp.net-mvc-3 - Asp.Net MVC 3 - 映射已经属于某个区域的单独路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7905400/

相关文章:

.net - 如何保持验证 DRY?

c# - 从下拉列表中选择值时如何回发到 Controller 功能

ruby - 单表继承情况下的表单助手

android - 使用谷歌 API 从我的位置绘制路线到目的地位置

ASP.NET MVC 查看存储在数据存储中的信息

asp.net-mvc - 在过滤器属性中获取区域、 Controller 和 Action 名称

.net - 自定义路由 ASP.NET MVC 在每个 Controller 中设置默认操作

.net - 将 UTF-16 编码的 gzip 内容响应返回给浏览器

Asp.Net MVC3 - FormsAuthentication,如何在浏览器关闭时使 cookie 过期?

Angular:子路由未正确更新