Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
До этого работал только с WebForms Надо создать динамическое меню I-го уровня, то есть: Код: plaintext 1. 2. 3. Создать Контроллер "Menu1Controller", потом Вьюху "Menu1/Index.cshtml" - вручную можно. А вот как такое сделать динамически (программно)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 19:04 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
potkin, https://github.com/maartenba/MvcSiteMapProvider для создания навигации, меню и хлебных крошек. Но если бы ты описал задачу более подробно, можно было бы дать правильные советы и направления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 20:33 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
hVostt Так, простое меню первого уровня надо создать. например как на SQL.RU: Название Гиперссылка Главная http://www.sql.ru/ Форум http://www.sql.ru/forum Рассылка http://www.sql.ru/subscribe/ Поиск http://www.sql.ru/search/ Только динамически, то есть сам пользователь создаёт это меню: название -> гиперссылка В ВебФормах я использовал класс Rewriter Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. А в MVC могу создать только вида: Название Гиперссылка Форум http://www.sql.ru/home/menu/forum То есть мне надо как-то убрать из линки "лишние" /home/menu ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 21:01 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
potkin, App_Start\RouteConfig.cs Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 21:08 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
potkinА в MVC могу создать только вида: любые можешь создать, какие хочешь, и без реврайта! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 21:09 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
редактируй файл App_Start/RouteConfig что-то типа такого Код: c# 1. 2. 3. 4. здесь задан дефолт как для контроллера, так и для экшена. Можешь задать только для экшена ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 21:09 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
hVostt, ошибка, в: "/home/{*slugs}" правильно: url: "home/{*slugs}" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 21:11 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
Для меню первого уровня надо убрать home/ Получим такое: Код: c# 1. 2. 3. 4. 5. Но тогда один Метод (MyAction) Контроллера (MyController) обрабатывает все события: Код: plaintext 1. 2. 3. Как-то не очень, теряется суть MVC ... Или я что-то не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 23:46 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
Все-все события (адреса): Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2015, 00:13 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
potkinКак-то не очень, теряется суть MVC ... Или я что-то не так делаю? Суть роутинга MVC состоит в том, чтобы исходя из адреса однозначно определить контроллер и действие, которые этот адрес обработают. Примеры: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Т.е. честный роутинг, который на 100% связывает контроллер и действие с адресом по его виду. Для того, чтобы удовлетворить требованиям SEO, часто добавляют ЧПУ после ID: http://www.sql.ru/forum/1152697 /mvc-i-marshruty Выделенное жирным используется для определения ресурса. Выделенное красным нужно только для поисковиков и для отображения в адресной строке ЧПУ. Если у тебя есть набор контроллеров и действий, но вид URL полностью от и до задаётся пользователями, тогда таблицу роутинга можешь строить динамически, вызывая routes.MapRoute с параметрами, полученными из базы. В самом общем виде, например для фронта CMS, достаточно одного контроллера и действия: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Вот и всё. Любые URL, хранятся в базе, обрабатываются одинаково, значит одного действия хватит. Но в реальном ПО конечно всё сложнее и требуется больше контроллеров. А чтобы жизнь себе не усложнять, не надо гнаться за "чистыми" URL, полностью повторяющими структуру сайта, можно обойтись ЧПУ-приставкой, как это делает sql.ru (часть ЧПУ адреса после ID). Но можно и совмещать, если до роутинга url: "{*slugs}" ты вставишь более конкретные маршруты, то приоритет у них будет выше, например, редактирование ресурса, админка и т.д. И когда конкретного маршрута не найдено, будет обработан универсальный {*slugs} маршрут. В общем, тут возможностей как всё выстроить миллион, никаких особых ограничений, делай как хочешь. Только пойми, что контроллер/действие != страница, как ASPX, это только логика обработки запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2015, 02:10 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
potkin Код: plaintext 1. 2. 3. 4. 5. с адресами понятно. а с логикой? пользователи, которые задают структуру сайта, логику тоже сами пишут? для каждого адреса свою на C#? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2015, 02:18 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
1. hVostt с адресами понятно. а с логикой? Пользователи, которые задают структуру сайта, логику тоже сами пишут? Для каждого адреса свою на C#? )) Нет, конечно. Есть админка, в ней и создают меню (I-го уровня), подменю (II-го уровня). А так же тип меню (что должно отображать меню): 1. Текст (статьи) 2. Список товара (типа интернет-магазина) 3. ... 2. Но вообще логично же, если есть меню: Код: plaintext Код: plaintext 3. По поводу индексации поисковиками. Если не ошибаюсь, то Гугл лучше будет индексировать такое: Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2015, 12:00 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
potkinНет, конечно. Есть админка, в ней и создают меню (I-го уровня), подменю (II-го уровня). А так же тип меню (что должно отображать меню): 1. Текст (статьи) 2. Список товара (типа интернет-магазина) 3. ... Очевидно же, что статьи с текстами будет обрабатывать один контроллер, список товаров другой, что-то там ещё, третий и т.д. Значит по адресу необходимо определить какой контроллер и действие должны обработать адрес. Логично? В ASP.NET MVC для этого служат специальные маршруты, которые могут это определить, буквально по адресу. Ну хорошо, у нас патовый случай: заранее по адресу ничего определить нельзя, пользователи админки сами рисуют абслютно любой URL и выбирают какое действие должно его обрабатывать (пускай они в админке создают статьи в разделе статей, и каталоги товаров в разделе каталогов товаров -- и там и там, они задают URL вручную для статетей и каталогов). Тогда нужно либо таблицу маршрутов формировать динамически, самый жёсткий способ вот такой (при изменении любого URL-а а админке): Код: c# 1. 2. 3. 4. 5. 6. 7. Мягкий способ состоит в написании своего маршрутизатора с кешированием и плюшками. Реврайт самый тупой способ. В принципе он такой же тупой и для ASPX, но там деваться некуда (по крайне мере раньше так было, либо через задницу, либо никак). potkinНо вообще логично же, если есть меню: Код: plaintext Код: plaintext Ну вот у тебя уже есть маршрут: "Blog/{id}-{alias}" -- пожалуйста. potkinПо поводу индексации поисковиками. Если не ошибаюсь, то Гугл лучше будет индексировать такое: Код: plaintext Код: plaintext Я не СЕО-шник, но в целом на сколько мне известно, поисковику на это положить. Он смотрит не на URL, а на реальную структуру сайтов. Вообще весь сайт может иметь вот такие URL-ы: site.com/id/1 site.com/id/100 site.com/id/123123 site.com/id/12 Но внутри иметь ветвистую структуру, отражаемую в sitemap.xml, как узлы с подчинёнными узлами, с крошками и прочим. Гугл и Яндекс отлично с этим справятся, и совершенно пофигу на вид URL-а. По сути ЧПУ в URL нужны только для людей, и раньше ключевики в URL тоже повышали рейтинг (сейчас тоже это имеет смысл, но совсем очень даже далеко не первичный, болтается где-то в самом конце). Могу ошибаться, в любом случае, реализовать можно любую логику. Я делал полное отражение структуры сайта в URL, такое было задание, писал свой обработчик маршрутов, который сопоставлял {*slugs} нужным контроллерам и действию. Примеров в сети полно, на StackOvefrlow.com тоже хватает примеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2015, 12:41 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
hVostt Таблицу маршрутов формировать динамически Код: c# 1. 2. 3. 4. 5. 6. 7. 8. Пишу туда данные их БД. На Сервере, что бы добавить новый Маршрут надо Остановить и Стартануть Сервер. На рабочей станции (в студии) Остановить отладку и сделать Run проекта . Как-то не очень ... hVostt Реврайт самый тупой способ. В принципе он такой же тупой и для ASPX Получается придётся пользоваться Реврайт-ом ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2015, 16:58 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
potkinКак-то не очень ... Вот рабочий способ: Таблица маршрутов: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. констрейт: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. теперь хендлер, который получает управления, если констрейт дал добро: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. potkinПолучается придётся пользоваться Реврайт-ом ... реврайтер нужен как кобыле пятое копыто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2015, 18:37 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь, но ... Не очень понятно что такое MySomeRouteManager и ResolveContext И про маршруты из БД. автор // пытаемся найти путь (ХЗ где, в базе данных, из параллельной вселенной, в подсознании спящего кайота...) Допустим пользователь внёс новый маршрут в БД (name, url, defaults {Controller, Action}). Я сделал выборку, получил эти данные. Раньше я делал так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. А теперь куда полученное данные из БД "вставить"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2015, 23:42 |
|
||
|
MVC и маршруты
|
|||
|---|---|---|---|
|
#18+
potkinА теперь куда полученное данные из БД "вставить"? судя по твоему коду, вот MySomeRouteManager и ResolveContext: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2015, 00:06 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38940036&tid=1356539]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 384ms |

| 0 / 0 |
