Справка по уменьшению соответствия маршрутов ASP.NET MVC3 - PullRequest
0 голосов
/ 31 июля 2011

Я пытаюсь поэкспериментировать с маршрутами в моем приложении ASP.NET MVC3 и попытаться уменьшить часть моего кода отображения.Я использую, пытаясь использовать общий UserController / View для моего приложения в нескольких различных объектах.Например, у вас есть магазины и компании, и у каждого есть свой набор пользователей.Есть ли способ уменьшить следующие два маршрута:

        routes.MapRoute(
            "StoreUsers", // Route name 
            "Store/Details/{entityID}/User/Index", // URL with parameters
            new { controller = "User", action = "StoreIndex"} // Parameter defaults
        );

        routes.MapRoute(
            "CompanyUsers", // Route name 
            "Company/Details/{entityID}/User/Index", // URL with parameters
            new { controller = "User", action = "CompanyIndex"} // Parameter defaults
        );

К чему-то похожему на это?

        routes.MapRoute(
            "EntityUsers", // Route name 
            "{entity}/Details/{entityID}/User/Index", // URL with parameters
            new { controller = "User", action = entity + "Index"} // Parameter defaults
            new { entity = "(Store|Company)" } //Parameter constraints
        );

и установить параметр {action} (и значение {action} по умолчанию)to: {entity} + "Index", чтобы его можно было использовать для объекта, который соответствует ограничениям.

Я уменьшаю только 2 маршрута до 1, но моя настоящая проблема связана не только с этими двумя объектами, и если я смогу заставить это работать, я могу использовать это для других контроллеров, которые должны имитировать то же самоефункциональность и другие действия (создание, редактирование и т. д.).

Спасибо

1 Ответ

0 голосов
/ 01 августа 2011

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

asp.net mvc сложная маршрутизация для дерева пути

Я мог бы настроить маршрут, чтобы он выглядел так:

        routes.MapRoute(
            "EntityUsers", // Route name 
            "{entity}/Details/{entityID}/{controller}/{subaction}/{id}", // URL with parameters
            new {controller = "User", subaction = "Index", id = UrlParameter.Optional}, // Parameter defaults
            new {entity = "(Lender|Dealer)", controller="User"}
        ).RouteHandler = new UserRouteHandler();

и класс UserRouteHandler выглядит следующим образом:

public class UserRouteHandler : IRouteHandler {
    public IHttpHandler GetHttpHandler(RequestContext requestContext) {
        string entity = requestContext.RouteData.Values["entity"] as string;
        string subaction = requestContext.RouteData.Values["subaction"] as string;
        if (entity != null && subaction != null)
        {
            requestContext.RouteData.Values["action"] = entity + subaction;
        }
        return new MvcHandler(requestContext);
    }
}

В конце концов, я слишком усложнил проблему, и мне это не нужно, но приятно знать, что у вас может быть такая гибкость

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...