Если имя действия найдено, вызовите действие, если не вызовите действие по умолчанию в маршрутизации MVC.

это мой текущий маршрут

routes.MapRoute(
            "Default",                                              // Route name
            "{action}/{id}",                                        // URL with parameters
            new { controller = "MarketingSite", action = "index", id = "" }  // Parameter defaults
        );

поэтому всякий раз, когда я захожу на domain.com/test

Это вызовет тестовое действие в контроллере с именем MarketingSite.

Чего я хочу добиться, так это когда я посещаю domain.com/load-from-db и, поскольку у меня нет действия, называемого load-from-db, я хочу направить запрос на определенное действие и load-from-db становится параметром для этого действия. В этом действии я собираюсь прочитать что-то из базы данных на основе параметра, а затем вернуть представление. Если я укажу существующее действие, оно просто вызовет это действие.

Любая помощь?


person user1552275    schedule 13.09.2012    source источник


Ответы (2)


Первое примечание: механизм маршрутизации будет применять маршруты в том порядке, в котором вы их перечисляете, проверяя каждый и продолжая, если он не может совпасть. В настоящее время у вас есть настройка маршрута «по умолчанию» в качестве универсального — если он не находит контроллер, он использует «MarketingSite», если нет никаких действий, он использует «index». Если я понимаю вашу проблему, вам вообще не нужно действие «Индекс», вы хотите вызвать другое действие и передать ему запрос.

Вы можете попробовать:

//Look for a matching action        
routes.MapRoute(
                    "MatchAction", // Route name
                    "{action}/{id}",
                     new { controller = "MarketingSite", id = UrlParameter.Optional}                                    
                );

//With a single segment, pass that to a specific action as a parameter.
routes.MapRoute(
                    "load-from-db",  // Route name
                    "{load-from-db}", // URL with parameters
                    new { controller = "MarketingSite", action = "MyAction"}
                );

//With no segments (ex. domain.com/) use the Index on MarketingSite as default.
routes.MapRoute(
                    "Default", // Route name
                    "", // URL with parameters
                    new { controller = "MarketingSite", action = "Index"}
                );

Однако эти маршруты могут не соответствовать вашим ожиданиям. Сопоставление маршрутов в MVC может оказаться сложной задачей. Вы должны проверить это это и соответствующим образом разработать маршруты.

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

person christophersw    schedule 14.09.2012

Переопределите метод HandleUnknownAction на контроллере MarketingSite:

protected override void HandleUnknownAction(string actionName) {
   // TODO: check for actionName in database
}
person Max Toro    schedule 14.09.2012