Режимы отображения ASP.NET MVC 4 для мобильных устройств с точным именем просмотра - PullRequest
0 голосов
/ 09 марта 2012

Я установил режим отображения в событии запуска приложения как

DisplayModeProvider.Instance.Modes.Insert( 0, new DefaultDisplayMode( "iPhone" ){
ContextCondition = ( context => 
    context.GetOverriddenUserAgent( ).IndexOf( 
        "iPhone", 
        StringComparison.OrdinalIgnoreCase ) >= 0 ) } );

Затем в контроллере у меня есть возвратный вид, где я указываю имя вида:

возвращаемое представление("~ / Views / Common / User / Login.cshtml", viewModel);

И если я захожу на страницу с iPhone, она сразу переходит к виду входа

Я не указываю имя представления:

return View( viewModel );

В этом случае с iPhone я вижу Login.iPhone.cshtml

Вопрос : можно ли указатьимя представления, но каким-то образом DisplayModeProvider будет выбирать общую или iPhone версию файла cshtml?

1 Ответ

0 голосов
/ 06 июня 2012

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

Вы можете добавить свои дополнительные местоположения в коллекции ViewLocationFormats и PartialViewLocationFormats для используемых вами ViewEngines.Таким образом, вы можете просто указать имя представления, как подсказывает tvanfosson, и MVC найдет файл правильно, что позволит переопределению мобильного устройства работать с его волшебством.

Вот код, который я использую для переопределения PartialViewLocationFormats, вы можететакже сделайте то же самое, используя ViewLocationFormats.Это добавлено в global.asax как часть application_start

            ViewEngines.Engines.Clear();
            var razorViewEngine = new RazorViewEngine
            {
                PartialViewLocationFormats = new[]
                {
                    "~/Views/{1}/{0}.cshtml",
                    "~/Views/Shared/{0}.cshtml",
                    "~/Views/{1}/EditorTemplates/{0}.cshtml",
                    "~/Views/{1}/DisplayTemplates/{0}.cshtml",
                    "~/Views/Shared/DisplayTemplates/{0}.cshtml"
                }
            };

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

...