首先请记住,我是 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/