Маршрутизация страниц/подстраниц ASP.NET MVC

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь понять, как справиться со следующим сценарием.В общем, у меня есть куча записей в таблице.Все они имеют поля ID и ParentID для формирования дерева.

Page1
 - Page2
 - Page3
Page4
 - Page5
 -- Page6

Теперь я хочу, чтобы мои маршруты для Page3 и Page6 были такими: /Page1/Page6 и /Page3/Page5/Page6 соответственно.То есть я хочу включить в URL всех родителей.

Как настроить действие/маршрутизацию моего контроллера для достижения вышеуказанного результата?

Редактировать:Забыл упомянуть, что приведенная выше структура будет динамической — узлы можно добавлять/удалять/изменять родительские и т. д.

Это было полезно?

Решение

Вы можете использовать совпадение с подстановочными знаками.

Возможный маршрут:

routes.MapRoute("SomeName", "{*Page}", new { controller = "ControllerName", action = "ActionName" });

и в действии принять строку Page и проанализировать ее вручную, возможно, с разделением?

Это также может быть полезно: URL-маршрутизация

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

Обратите внимание, что имя и действие контроллера фиксированы и не зависят от URL-адреса.

// place the more specific route first
routes.MapRoute("r1", "{parent}/{child}/{subchild}", 
    new { controller = "Page", action = "Index", parent = parent, child = child, subchild = subchild });

routes.MapRoute("r2", "{parent}/{child}", 
    new { controller = "Page", action = "Index", parent = parent, child = child });


public class PageController
{
    public ActionResult Index(string parent, string child, string? subchild)
    {
        // stuff
    }
}

Вы должны использовать

routes.MapRoute("Page6", "Page3/Page5/Page6", new { controller = "Page6", action = "Index" });

или, возможно, используя маршрутизацию регулярных выражений

http://blog.sb2.fr/post/2009/01/03/Regular-Expression-MapRoute-With-ASPNET-MVC.aspx

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