Укажите специальный обработчик для MapRoute в ASP.NET MVC 3 - PullRequest
1 голос
/ 08 февраля 2012

У меня есть следующий маршрут, определенный в Global.asax:

routes.MapRoute(
                "IncidentActionWithId", // Route name
                "Incidents/{companyId}/{action}/{id}", // URL with parameters
                new { controller = "Incidents" } // Parameter defaults
            );

У меня есть особый случай запроса, подобный этому:

/Incidents/SuperCompany/SearchPeople/Ko

В этом случае действие должнодействительно, сопоставление с SearchPeople action, comapnyId с параметром этого действия, но только когда action является SearchPeople, Ko не должно быть сопоставлено с параметром id действия, а с searchTerm.

Мое объявление действия:

[HttpGet]
public ActionResult SearchPeople(string companyId, string searchTerm)

Как я могу добиться, чтобы Ko был сопоставлен с параметром searchTerm в моем методе действия?

1 Ответ

1 голос
/ 08 февраля 2012

Вы можете определить два маршрута, один с id и один с searchTerm , если идентификатор должен быть числовым (или вы можете указать регулярное выражение constratints ) и иметь другой шаблон для searchTerm.

См. здесь , как вы можете определить ограничения.

Пример:

routes.MapRoute(
            "IncidentActionWithId", // Route name
            "Incidents/{companyId}/{action}/{id}", // URL with parameters
            new { controller = "Incidents" }, // Parameter defaults
            new {id = @"\d+"} // numeric only
        );

routes.MapRoute(
            "IncidentActionWithId", // Route name
            "Incidents/{companyId}/{action}/{searchterm}", // URL with parameters
            new { controller = "Incidents" } 
        );

Примечание

Сначала определите тот, у кого есть ограничение.

...