Мобильные устройства не получат представления View.Mobile.cshtml после посещения страницы с рабочим столом - PullRequest
0 голосов
/ 24 ноября 2018

Я создал приложение asp.net mvc с Index.cshtml и Index.Mobile.cshtml.Представления используют тот же контроллер и действие.В процессе разработки я получаю мобильное представление на своем телефоне, а с рабочего стола - на рабочем столе.Все работает как положено.

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

Я отключил и включил настройки кэширования, но в любом случае у меня такое странное поведение.Я что-то упустил?

отредактировано:

Я получил следующую структуру темы:

/ Темы / DefaultTheme / Views / Cart / Index.Mobile.cshtml / Темы / OceanasTheme/Views/Cart/Index.cshtml

В моем собственном механизме просмотра бритвы я изменил ViewLocationFormats, упростив:

var customViewLocationFormats = new List<string>();
customViewLocationFormats.Add("~/Themes/DefaultTheme/Views/{1}/{0}.cshtml");
customViewLocationFormats.Add("~/Themes/OceanasTheme/Views/{1}/{0}.cshtml");

//override default view location
ViewLocationFormats = customViewLocationFormats.ToArray();

Когда я копирую Index.Mobile.cshtml в папку OceanasTheme та же проблемапоявляется, за исключением того, что я получаю Mobile.сshtml от OceanasTheme каждый раз после посещения рабочего стола.(рабочий стол получает Index.cshtml от OceanasTheme).

Обновлен до MVC 5.2.7 и удален пакет Microsoft.AspNet.Mvc.FixedDisplayModes.Но это все еще не работает.

1 Ответ

0 голосов
/ 15 декабря 2018

RazorViewEngine кэширует представления с помощью DefaultViewLocationCache.Местоположение .Mobile View сохраняется в кеше после первого запроса с мобильного.При запросе с помощью настольного браузера вариант рабочего стола не обнаруживается в кэше, поэтому RazorViewEngine попытается найти представление на диске.Он найдет представление в другой папке и сохранит его в кеше, но также проверит, существует ли мобильный телефон в этой папке.Поскольку .Mobile отсутствует в этой папке, он будет перезаписывать кэш пустым путем.

Я исправил эту проблему, создав пользовательскую реализацию IViewLocationCache.

...