| Вторник, 26 февраля, 2013
Метки: ASP.NET MVC Комментарии: 0
В ASP.NET MVC 4 появились шаблоны разработки сайтов для мобильных устройств. Но размещать такие сайты можно только с использованием субдомена, на который перенаправляются пользователи, зашедшие на сайт через мобильный браузер. Данная статья расскажет о том, как разработать приложение ASP.NET MVC 4, чтобы оно работало сразу и для обычных браузеров и для мобильных устройств без перенаправления на специальный субдомен с мобильным приложением.
В MVC 4 появилась новая возможность изменения режима отображения, когда можно создавать различные версии представления, и выбирать соответствующую версию в зависимости от используемого браузера. Например, если десктопный браузер запросил начальную страницу сайта, то генерируется страница через представление Views\Home\HomePage.cshtml, а если запрос пришел от браузера мобильного устройства, то выбирается представление Views\Home\HomePage.Mobile.cshtml, причем URL будет тем же самым.
Так же работают мастер-представления и частичные представления. То есть, для каждого запроса десктопного браузера будет использоваться Views\Shared\_Layout.cshtml, а для мобильного - Views\Shared\_Layout.Mobile.cshtml.
Чтобы начать использовать различные представления для различных браузеров, нужно зарегистрировать режим отображения в событии Application_Start в файле global.asax.cs. И затем приложение сможет выбирать нужную версию представления в зависимости от того, каким условиям удовлетворяет браузер.
Зарегистрировать новый режим отображения можно с помощью класса DefaultDisplayMode. Например, следующий код зарегистрирует режим отображения "Mobile", который будет использоваться для запросов от мобильных браузеров.
protected void Application_Start() { System.FunccontextCheckDelegate = contextCheck; DefaultDisplayMode mobileMode = new DefaultDisplayMode("Mobile"); mobileMode.ContextCondition = contextCheckDelegate; DisplayModeProvider.Instance.Modes.Add(mobileMode); } public bool contextCheck(HttpContextBase httpContextBase) { if(/* проверить здесь - мобильный ли браузер */) { return true; } else { return false; } }
В коде выше свойству ContextCondition передается делегат функции проверки браузера. И затем объект режима отображения помещается в коллекцию для дальнейшего использования. Как можно увидеть из кода, есть возможность зарегистрировать произвольное количество режимов отображения.
Рассмотрим небольшой пример приложения с двумя режимами отображений - для десктопных браузеров и для мобильных.
protected void Application_Start() { System.Func<HttpContextBase, bool> contextCheckDelegate = contextCheck; DefaultDisplayMode mobileMode = new DefaultDisplayMode("Mobile"); mobileMode.ContextCondition = contextCheckDelegate; DisplayModeProvider.Instance.Modes.Add(mobileMode); } public bool contextCheck(HttpContextBase httpContextBase) { string strUserAgent = httpContextBase.Request.UserAgent; Regex strBrowser = new Regex(@"android.+mobile|blackberry|ip(hone|od)", RegexOptions.IgnoreCase | RegexOptions.Multiline); if ((strBrowser.IsMatch(strUserAgent))) { return true; } return false; }
Самое важное в этом примере, то что в браузеры открыли содержимое с одинаковым URL, но сгенерированы страницы по-разному.
Copyright © CodeHint.ru 2013-2024 (v2.4.7 - работает на Angular Universal)Калькулятор инвест-портфеля