маршруты mvc для совместного использования одного и того же действия?

StackOverflow https://stackoverflow.com/questions/1621821

  •  06-07-2019
  •  | 
  •  

Вопрос

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

/ShowName/NameById
/ShowName/Index

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

    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"
        }
   );

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

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

Итак, работает ли следующий URL-адрес?

/Name/Charley
/Name/Charley/11234
Это было полезно?

Решение

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

Name/{theName}/{nameId}

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

Другие советы

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

return View("DetailView", model);

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top