Как выполнять расширенные маршруты ASP.NET MVC (3) (вычисляемые действия и т. Д.)? - PullRequest
3 голосов
/ 20 мая 2011

ОБНОВЛЕНО

С учетом следующих 8 маршрутов, где Administration равно область , контроллер равен EmployeesController, а Id равен EmployeeId:

  1. Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Delete
    • действие = DeletePhone
  2. Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Deactivate
    • action = DeactivatePhone
  3. Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Activate
    • действие = ActivatePhone
  4. Administration/Corporate/{controller}/{Id}/Notes/{NoteId}/Delete
    • действие = DeleteNote
  5. Administration/Corporate/{controller}/{Id}/Files/{FileId}/Delete
    • action = DeleteFile
  6. Administration/Corporate/{controller}/{Id}/Addresses/{AddressId}/Delete
    • action = DeleteAddress
  7. Administration/Corporate/{controller}/{Id}/Addresses/{AddressId}/Deactivate
    • action = DeactivateAddress
  8. Administration/Corporate/{controller}/{Id}/Addresses/{AddressId}/Activate
    • действие = ActivateAddress

Как я могу преобразовать это в:

Administration/Corporate/{controller}/{Id}/{object}/{ObjectId}/{action}, где объект равен Phones|Notes|Files|Addresses|?, а action равен Delete|Deactivate|Activate|??

  1. Мне нужно взять объект и выделить его (для которого у меня уже есть код).
    • object = Phones (Phone)
  2. Выполнить действие и преобразовать (переписать?) В действие + объект (в единственном числе).
    • action = Delete + Phone (DeletePhone)

Я могу сделать все до второго # 2, где проблема заключается в том, как я могу преобразовать действие во что-то другое в определении маршрута ?

Возможно ли вообще что-либо из этого? Было бы неплохо взять 8 маршрутов, которые у меня есть, и превратить их в 1. И в этом примере используется только мой EmployeesController, мой CustomersController в два раза больше, так что около 16 маршрутов можно превратить в 1. Это сэкономит много места и кода.

В любом случае, я с нетерпением жду предложений и идей, если это возможно.

Ответы [ 2 ]

1 голос
/ 20 мая 2011

Вы можете создать собственный обработчик маршрута.

public class CustomRoute : RouteBase
{
    //your custom code
}

Маршрутизация поддоменов ASP.NET MVC

0 голосов
/ 20 мая 2011

Я бы настроил простой массив и метод для обработки подобных вещей. Это не совсем элегантно, но должно быть легко понять:

public static void RegisterRoutes()
{
    var adminRoutes = new[]
                            {
                                new [] { "Phones", "PhoneId", "Delete", "DeletePhone" },
                                // Add the rest of your routes here.
                            };

    foreach ( var adminRoute in adminRoutes )
    {
        RegisterAdminRoute( adminRoute[0], adminRoute[1], adminRoute[2], adminRoute[3] );
    }
}

public static void RegisterAdminRoute( string area, string idName, string actionName, string action )
{
    RouteTable.Routes.MapRoute
        (
            area + actionName,
            String.Format( "Administration/Corporate/{{controller}}/{{Id}}/{0}/{{{1}}}/{2}",
                            area,
                            idName,
                            actionName ),
            new { action }
        );
}
...