Маршруты MVC, чтобы поделиться тем же действием? - PullRequest
0 голосов
/ 25 октября 2009

У меня есть следующие два маршрута, определенные в моем приложении MVC.; - На данный момент у меня есть две "MVC View content pages", определенные

/ShowName/NameById
/ShowName/Index

Однако содержание на этих двух страницах идентично? Возможно ли совместное использование одной и той же страницы контента двумя маршрутами? Если нет, то могу ли я: а) создать единое правило для обоих маршрутов или б) я должен создать пользовательский контроль для совместного использования обеих страниц контента для отображения моих данных?

    routes.MapRoute(
       "NameById",
       "Name/{theName}/{nameId}",
        new
        {
            action = "NameById",
            controller = "ShowName",
            theName = "Charley"
        }
        ,new { nameId = @"\d+" }
   );

    routes.MapRoute(
       "ShowName",
       "Name/{theName}",
        new
        {
            action = "Index",
            controller = "ShowName",
            theName = "Charley"
        }
   );

EDIT Я прочитал ответы ниже, и у меня есть следующие методы результата действия. Если я удалю один из методов (например, индекс), то как мне переписать мои маршруты на один маршрут?

public ActionResult Index(string theName)
public ActionResult NameById(string theName, int? nameId)

Значит, следующие работы URL работают?

/Name/Charley
/Name/Charley/11234

Ответы [ 2 ]

1 голос
/ 25 октября 2009

Вы можете создать частичное представление для области детализации страницы, сохраняя разделение двух действий на случай, если они изменятся на более позднем этапе. Или вы могли бы просто

return View("DetailView", model);

Но это может ввести дополнительную строку для управления между двумя действиями контроллера. Поскольку MVC не поддерживает перегрузку по имени действия (если у вас нет пары GET / POST, у которой нет аргументов), вы можете просто проверить параметр {nameId} и посмотреть, является ли он пустым / пустым, прежде чем его использовать.

0 голосов
/ 25 октября 2009

Вам действительно нужны 2 разных маршрута? Вы могли бы сделать шаблон для вашего индексного маршрута

Name/{theName}/{nameId}

и сделайте nameId обнуляемым вводом для вашего действия. Затем просто добавьте к своему действию некоторую логику, которая проверяет, имеет ли nameId значение и действует ли соответственно

...