Re: [MVC] Routing
От: Ziaw Россия  
Дата: 19.04.10 15:16
Оценка: 4 (2)
Здравствуйте, alvas, Вы писали:

A>Как сделать ссылки первого уровня типа localhost/About и localhost/Faq.


A>Для этого делаю виды Views/About/Index.aspx и Views/Faq/Index.aspx + по контроллеру Controllers/AboutController.cs и Controllers/FaqController.cs

A>Хотелось иметь один контроллер типа Controllers/DefaultController.cs и Views/About.aspx и Views/Faq.aspx

A>Как это настроить?


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

                        // это надо воткнуть до маршрута по умолчанию
            var firstLevelActions = new[]  { "Faq", "About" };
            foreach (var fla in firstLevelActions)
            {
                routes.MapRoute(
                    "FirstLevelRoute" + fla, // Route name
                    fla, // URL with parameters
                    new {controller = "Default", action = fla} // Parameter defaults
                    );
            }
            // end

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

Только вьюхи всетаки придется положить во Views/Default или Views/Shared. Или настраивать view engine, это я не буду за тебя делать, ибо блажь, имхо.
... << RSDN@Home 1.2.0 alpha 4 rev. 1468>>
[MVC] Routing
От: alvas  
Дата: 19.04.10 12:14
Оценка:
Как сделать ссылки первого уровня типа localhost/About и localhost/Faq.

Для этого делаю виды Views/About/Index.aspx и Views/Faq/Index.aspx + по контроллеру Controllers/AboutController.cs и Controllers/FaqController.cs
Хотелось иметь один контроллер типа Controllers/DefaultController.cs и Views/About.aspx и Views/Faq.aspx

Как это настроить?
http://alvas.net — Аудио-инструменты для .Net разработчиков
mvc
Re: [MVC] Routing
От: SE Украина  
Дата: 19.04.10 14:10
Оценка:
Здравствуйте, alvas, Вы писали:

A>Как сделать ссылки первого уровня типа localhost/About и localhost/Faq.


A>Для этого делаю виды Views/About/Index.aspx и Views/Faq/Index.aspx + по контроллеру Controllers/AboutController.cs и Controllers/FaqController.cs

A>Хотелось иметь один контроллер типа Controllers/DefaultController.cs и Views/About.aspx и Views/Faq.aspx

A>Как это настроить?


Нужно задать умолчания.
В Global.asax.cs у меня написано.
routes.MapRoute("Default", "{controller}/{action}", new { controller = "Home", action = "Index" } );


Теперь в Controllers я создаю класс HomeController.cs:

    /// <summary>
    /// Default controller.
    /// </summary>
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            return View("About");
        }

        public ActionResult About()
        {
            return View("Faq");
        }
    }


Файлы представлений About.aspx и Faq.aspx лежат в Views/Shared
mvc routing
Re[2]: [MVC] Routing
От: alvas  
Дата: 19.04.10 14:28
Оценка:
Здравствуйте, SE, Вы писали:

SE>Нужно задать умолчания.

SE>В Global.asax.cs у меня написано.
SE>
SE>routes.MapRoute("Default", "{controller}/{action}", new { controller = "Home", action = "Index" } );
SE>


SE>Теперь в Controllers я создаю класс HomeController.cs:


SE>
SE>    /// <summary>
SE>    /// Default controller.
SE>    /// </summary>
SE>    public class HomeController : Controller
SE>    {
SE>        public ActionResult Index()
SE>        {
SE>            return View();
SE>        }

SE>        public ActionResult About()
SE>        {
SE>            return View("About");
SE>        }

SE>        public ActionResult About()
SE>        {
SE>            return View("Faq");
SE>        }
SE>    }
SE>


SE>Файлы представлений About.aspx и Faq.aspx лежат в Views/Shared


Не работает Хоть я и сделал как вы описали...
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[2]: [MVC] Routing
От: alvas  
Дата: 19.04.10 15:26
Оценка:
Здравствуйте, Ziaw, Вы писали:

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

Z>                        // это надо воткнуть до маршрута по умолчанию
Z>            var firstLevelActions = new[]  { "Faq", "About" };
Z>            foreach (var fla in firstLevelActions)
Z>            {
Z>                routes.MapRoute(
Z>                    "FirstLevelRoute" + fla, // Route name
Z>                    fla, // URL with parameters
Z>                    new {controller = "Default", action = fla} // Parameter defaults
Z>                    );
Z>            }
Z>            // end

Z>            routes.MapRoute(
Z>                "Default", // Route name
Z>                "{controller}/{action}/{id}", // URL with parameters
Z>                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
Z>            );

Z>        }

Z>

Z>Только вьюхи всетаки придется положить во Views/Default или Views/Shared. Или настраивать view engine, это я не буду за тебя делать, ибо блажь, имхо.

Вот это ближе к телу.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[3]: [MVC] Routing
От: SE Украина  
Дата: 19.04.10 19:34
Оценка:
Здравствуйте, alvas, Вы писали:

A>Не работает Хоть я и сделал как вы описали...


Виноват, задумался о своем и написал бессмыслицу.
Re: [MVC] Routing
От: ankstoo  
Дата: 23.04.10 15:08
Оценка:
Какие есть идеи по организации более сложного роутинга?

Например.
Есть несколько вариантов сайта — "html", "silverlight", "mobile", "touch".
Соответственно для каждого из них есть собственный контроллер и набор соответствующих view.
Набор страниц для каждой версии примерно одинаков — "index", "profile", "messages" и т.д.

Таким образом у нас есть пути:
— site.com/html/index
— site.com/html/profile
— site.com/mobile/index
— site.com/mobile/profile
— ...

Охота, чтобы при заходе на страницы типа "site.com/index", "site.com/profile" для пользователя определялась подходящий ему вариант сайта, записывалась в Cookie и он продолжал с ним работать.
Так же у пользователя есть возможность сменить текущий вариант.

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

Пока приходит на ум только такой вариант — создать контроллер "RouteController", установить его для корневых страниц, в нем проверять куки и делать редирект к нужному контроллеру.

А хочется что-то типа
  RouteBuilder.Current.SetRouteFactory(MyRouteFactory);


Такой возможности я не нашел, может не там искал?
Re[2]: [MVC] Routing
От: SE Украина  
Дата: 23.04.10 15:36
Оценка:
Здравствуйте, ankstoo, Вы писали:

A>Охота, чтобы при заходе на страницы типа "site.com/index", "site.com/profile" для пользователя определялась подходящий ему вариант сайта, записывалась в Cookie и он продолжал с ним работать.

A>Так же у пользователя есть возможность сменить текущий вариант.

A>Хочется каким-то образом расширить логику роутинга, чтобы при заходе на страницы без указания варианта сайта, роутер по кукам отправлял к нужному контроллеру.


A>Пока приходит на ум только такой вариант — создать контроллер "RouteController", установить его для корневых страниц, в нем проверять куки и делать редирект к нужному контроллеру.


A>А хочется что-то типа

A>
A>  RouteBuilder.Current.SetRouteFactory(MyRouteFactory);
A>


A>Такой возможности я не нашел, может не там искал?


Попробую ткнуть пальцем в небо, а области (areas) тут не помогут? Они предназначены для разделения чрезмерно большого проекта на несколько групп по функциональному признаку, но, может, подойдет?
Re[3]: [MVC] Routing
От: ankstoo  
Дата: 23.04.10 16:23
Оценка:
Здравствуйте, SE, Вы писали:

SE>Попробую ткнуть пальцем в небо, а области (areas) тут не помогут? Они предназначены для разделения чрезмерно большого проекта на несколько групп по функциональному признаку, но, может, подойдет?


Areas — это просто еще один уровень группировки элементов сайта. Проблему они не решат.
Все равно нужно писать собственный контроллер в default area, откуда перенаправлять в нужную area.
Re[2]: [MVC] Routing
От: alvas  
Дата: 23.04.10 16:29
Оценка:
Здравствуйте, ankstoo, Вы писали:

A>Такой возможности я не нашел, может не там искал?


А может лучше просто детектить UserAgent и отдавать версию сайта, оптимизированную под конкретное устройство не меняя ссылок?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[3]: [MVC] Routing
От: ankstoo  
Дата: 23.04.10 16:50
Оценка:
Здравствуйте, alvas, Вы писали:

A>А может лучше просто детектить UserAgent и отдавать версию сайта, оптимизированную под конкретное устройство не меняя ссылок?


Логика UI для разных вариантов сайта различается. Поэтому для каждой из них необходим свой контроллер. Через что будет происходить переход между контроллерами — через redirect или через прямой вызов — не так важно.

Возможность указать вариант приложения в адресе нужна — чтобы можно было "ну и что что я с winmobile сижу — хочу полную версию сайта".
А при заходе без указания варианта — конечно проверка UserAgent или Cookie.
Re[4]: [MVC] Routing
От: alvas  
Дата: 23.04.10 17:01
Оценка:
Здравствуйте, ankstoo, Вы писали:

A>>А может лучше просто детектить UserAgent и отдавать версию сайта, оптимизированную под конкретное устройство не меняя ссылок?


A>Логика UI для разных вариантов сайта различается. Поэтому для каждой из них необходим свой контроллер. Через что будет происходить переход между контроллерами — через redirect или через прямой вызов — не так важно.


A>Возможность указать вариант приложения в адресе нужна — чтобы можно было "ну и что что я с winmobile сижу — хочу полную версию сайта".

A>А при заходе без указания варианта — конечно проверка UserAgent или Cookie.

Если я правильно все понимаю — вам нужно детектить и перенаправлять — предлагаю
1. написать свой ActionFilter
2. или использовать свой базовый контролер и от него наследоваться.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[5]: [MVC] Routing
От: ankstoo  
Дата: 23.04.10 17:13
Оценка:
Здравствуйте, alvas, Вы писали:

A>Если я правильно все понимаю — вам нужно детектить и перенаправлять — предлагаю

A>1. написать свой ActionFilter
Не очень хорошо — как я понимаю нужно писать атрибут моего ActionFilter перед каждым Action в каждом контроллере.

A>2. или использовать свой базовый контролер и от него наследоваться.

Пока самый приемлемый вариант.
Но хочется разделения ответственности — контроллер управляет поведением UI, а роутингом занимается роутер
Re[6]: [MVC] Routing
От: alvas  
Дата: 23.04.10 17:24
Оценка:
A>>Если я правильно все понимаю — вам нужно детектить и перенаправлять — предлагаю
A>>1. написать свой ActionFilter
A>Не очень хорошо — как я понимаю нужно писать атрибут моего ActionFilter перед каждым Action в каждом контроллере.

A>>2. или использовать свой базовый контролер и от него наследоваться.

A>Пока самый приемлемый вариант.
A>Но хочется разделения ответственности — контроллер управляет поведением UI, а роутингом занимается роутер

Можно совместить приятное с полезным, просто указав Inherited = true для вашего атрибута
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[2]: [MVC] Routing
От: Митяй Россия http://dkomanov.livejournal.com
Дата: 04.05.10 11:32
Оценка:
A>Какие есть идеи по организации более сложного роутинга?

Как вариант — оставлять единый контроллер и подставлять нужные View: http://www.hanselman.com/blog/MixMobileWebSitesWithASPNETMVCAndTheMobileBrowserDefinitionFile.aspx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.