Asp.Net MVC 3 - Карта отдельного маршрута, который уже принадлежит области - PullRequest
4 голосов
/ 26 октября 2011

Прежде всего, помните, что я новичок в nop / mvc, и, несмотря на все мои усилия, не могу найти решения этой, казалось бы, простой задачи.

Я определяю собственные маршруты для плагина, который я создаю, и до сих пор все шло хорошо. Любые определенные мной маршруты работали без проблем (например, я установил маршруты для «/ Dealerlocator» и «Dealer / List»)

Проблема связана с тем, что уже существует область, определенная для '/ Admin ", поэтому, когда я пытаюсь установить собственный маршрут для чего-то вроде" 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. Может быть, есть способ установить приоритет на моем маршруте выше, чтобы он был разрешен первым? Спасибо.

1 Ответ

2 голосов
/ 09 ноября 2011

Я также сталкивался с этой проблемой некоторое время назад, это связано с приоритетом маршрута. Этот пост мне очень помог .

Относительно вашего комментария - нет причин, по которым вы не могли бы сделать это, но, в качестве альтернативы, вам может повезти, если вы определите свой маршрут как;

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

Надеюсь, это поможет,

Мэтт

...