Режимы мобильного дисплея ASP.NET MVC 4 перестают работать

Мобильные режимы отображения в ASP.NET MVC 4 перестают обслуживать правильные представления примерно через час безотказной работы, несмотря на то, что браузер переопределяет правильное определение переопределенного мобильного устройства.

Повторное использование пула приложений временно решает проблему.

Новая функция переопределения браузера правильно позволяет мобильным устройствам просматривать настольную версию сайта и наоборот. Но примерно через час безотказной работы мобильные представления больше не отображаются для мобильного устройства; отображаются только стандартные шаблоны Razor для настольных ПК. Единственное решение - переработать пул приложений.

Как ни странно, куки-файл переопределения браузера продолжает работать. В главном шаблоне _Layout.cshtml правильно отображается текст для мобильных устройств или компьютеров в зависимости от значения ViewContext.HttpContext.GetOverriddenBrowser (). IsMobileDevice , но неправильные представления все еще отображаются оказано.Это наводит меня на мысль, что проблема кроется в DisplayModes.

Рассматриваемое действие не кэшируется:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

Я использую 51Degrees для обнаружения мобильных устройств, но не думаю, что это должно повлиять на переопределенное обнаружение мобильных устройств. Это ошибка функции DisplayModes для бета-версии ASP.NET MVC 4 и предварительной версии для разработчиков, или я делаю что-то еще не так?


Вот моя настройка DisplayModes в Application_Start :

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iPhone")
{
    ContextCondition = context =>
        context.GetOverriddenBrowser().IsMobileDevice
        && (context.Request.UserAgent.IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0
        || context.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0
        || !context.Request.Browser.IsMobileDevice)
    });

/*  Looks complicated, but renders Home.iPhone.cshtml if the overriding browser is
    mobile or if the "real" browser is on an iPhone or Android. This falls through
    to the next instance Home.Mobile.cshtml for more basic phones like BlackBerry.
*/

DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("Mobile")
{
    ContextCondition = context =>
        context.GetOverriddenBrowser().IsMobileDevice
});
28
задан Petrus Theron 21 March 2012 в 11:03
поделиться

2 ответа

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

См. http://aspnetwebstack.codeplex.com/workitem/276 для получения дополнительной информации

.
1
ответ дан 28 November 2019 в 03:51
поделиться

Разве вы не можете просто сделать это?

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    // Code removed for clarity.

    // Cache never expires. You must restart application pool
    // when you add/delete a view. A non-expiring cache can lead to
    // heavy server memory load.

    ViewEngines.Engines.OfType<RazorViewEngine>().First().ViewLocationCache =
        new DefaultViewLocationCache(Cache.NoSlidingExpiration);

    // Add or Replace RazorViewEngine with WebFormViewEngine
    // if you are using the Web Forms View Engine.
}
0
ответ дан 28 November 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: