передача параметров в действие контроллера - PullRequest
1 голос
/ 11 февраля 2012

Я ищу способ сократить URL для получения некоторых из БД. У меня есть Homecontroller и действие writing, которое добавляет строки в БД, и у каждого из них есть UID. Также существует действие search, которое находит запись в БД и отображает представление.

Поэтому я использую localhost/Home/writing для добавления записи и localhost/Home/search/3456 для поиска записи по UID.

Есть ли способ передать UID (3456) в действие контроллера, пропуская имя действия, поэтому для поиска записи я могу использовать localhost/Home/3456 или даже localhost/3456?

Я пробовал

routes.MapRoute(
    "default-action", 
    "{controller}/{id}", 
    new { action = "search", id = UrlParameter.Optional }
);

и

routes.MapRoute(
    "default-action", 
    "{id}", 
    new {controller = "Home", action = "search", id = UrlParameter.Optional }
);

но ничего не получил.

1 Ответ

0 голосов
/ 11 февраля 2012

Вы можете попробовать использовать ограничение маршрута:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Search",
        "{id}",
        new { controller = "Home", action = "Search" },
        new { id = @"\d+" }
    );

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Сейчас:

  • localhost/Home/writing выполнит действие Writing на HomeController
  • localhost/3456 выполнит действие Search на HomeController и передаст его id=3456 в качестве параметра

Числовое ограничение, которое мы определили для маркера маршрута {id}, необходимо для того, чтобы механизм маршрутизации устранял неоднозначность между поиском и шаблонами маршрута по умолчанию (поскольку имена действий не могут начинаться с цифры). Предполагается, что ваши идентификаторы являются числами.

...