Pracuję nad nowym projektem przy użyciu ASP.NET MVC 3 w/Razor i rozwijam 2 różne widoki tej samej witryny, pełnej wersji i wersji mobilnej. Jakie są najlepsze praktyki/podejścia do korzystania z tych samych kontrolerów, ale wyświetlanie różnych widoków w oparciu o klienta użytkownika? Czy powinienem sobie z tym poradzić w kontrolerach? Wydaje się, że byłoby to uciążliwe, redundantne, podatne na błędy, gdyby instrukcje w każdej akcji kontrolera sprawdzały agenta użytkownika, a następnie zwracały inny widok w zależności od urządzenia.ASP.NET MVC osobne widoki mobilne za pomocą tych samych kontrolerów
Odpowiedz
ten można teraz przeprowadzić stosując wbudowany cechą ASP.NET MVC (od wersji 4 roku) o nazwie „DisplayModes”
Domyślnie ASP.NET MVC jest dostarczany z dwoma trybami wyświetlania zabudowy. Istnieje domyślny tryb wyświetlania, który renderuje "standardowe" widoki, tak jak zawsze, i istnieje również ogólny tryb wyświetlania "mobilny".
To działa, wykrywając, czy urządzenie klienta jest przeglądarką mobilną, czy nie (co samo jest określane przez wykrywanie User-Agent string urządzenia klienta, więc nie jest w 100% niezawodne). Jeśli urządzenie zostanie określone jako urządzenie mobilne, rzeczywisty widok MVC, który jest wysyłany do klienta, zostanie zastąpiony, a alternatywny widok zostanie zrenderowany i wysłany. W przypadku dołączonego trybie wyświetlacza telefonu, jest skonfigurowany tak, aby spojrzeć na widok z przyrostkiem .mobile.cshtml
zamiast .cshtml
(jak pokazano na poniższym zrzucie ekranu)
Pozwala to na zaprojektowanie całkowicie różne poglądy który zostanie wysłany na urządzenie mobilne a urządzenie inne niż mobilne, bez konieczności wprowadzania zmian w logice sterownika, więc nie musisz uwzględniać tam żadnej logiki warunkowej.
Jeśli potrzebujesz większej szczegółowości kontroli nad widokiem, który został wysłany do urządzenia klienta, cała funkcjonalność trybów wyświetlania jest konfigurowalna i rozszerzalna. Możesz zdefiniować własne tryby wyświetlania (zwykle wykonywane w Uruchamianiu aplikacji), które mogą być specyficzne dla danej przeglądarki, danego urządzenia lub dowolnej dowolnej definicji. Wszystkie są oparte na ciągu agenta użytkownika pochodzącym z urządzenia klienta.
Rozważmy następujący fragment kodu poniżej, który pokazuje dodanie 3 dodatkowe tryby niestandardowy wyświetlania dla Windows Phone, iPhone i Android w sposobie uruchamiania aplikacji:
protected void Application_Start()
{
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("WP")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("Windows Phone OS",StringComparison.OrdinalIgnoreCase) >= 0)
});
DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("iPhone")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});
DisplayModeProvider.Instance.Modes.Insert(2, new DefaultDisplayMode("Android")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0)
});
}
Każdy tryb wyświetlania jest podany identyfikator i ciąg dopasuj ciąg znaków agenta użytkownika, aby określić, czy ten tryb wyświetlania ma być używany. Jeśli tak, to DisplayModeProvider będzie szukał widoku z tym samym sufiksem ciągu znaków. (Dla powyższego trybu wyświetlania iPhone'a spodziewamy się znaleźć ciąg "iPhone" w dowolnym miejscu ciągu agenta użytkownika, a jeśli istnieje, używamy tego trybu wyświetlania, który renderuje widoki z przyrostkiem iphone.cshtml
, zamiast z przyrostkiem .
Możesz przeczytać więcej o tej funkcji, tutaj. http://www.asp.net/mvc/overview/older-versions/aspnet-mvc-4-mobile-features konkretnie w sekcjach zatytułowanych „nadrzędne Widoki, Układy i częściowym widokiem” i „Przeglądarka specyficzne Views”
Dziękujemy za grea t odpowiedz! W oparciu o twoją odpowiedź chciałbym zbudować ścieżkę do różnych obrazów w kodzie za sobą, a nie w widoku "Widok". Czy w jakiś sposób można to zrobić w kontrolerze? –
- 1. Widoki mobilne/Wykrywanie urządzenia
- 2. Sesja zerowa w konstruktorze kontrolerów ASP.Net MVC
- 3. MVC4: Wyłącz widoki mobilne na niektórych kontrolerach
- 4. Polimorficzne widoki MVC
- 5. ASP.NET MVC Routing widoki poziomu root
- 6. Dlaczego widoki mobilne w ASP.NET MVC wyświetlają się inaczej na różnych serwerach?
- 7. ASP.NET MVC, częściowe widoki i dane
- 8. Widoki przyjazne dla projektantów w Asp.Net MVC
- 9. Widoki częściowe Buforowanie w ASP.NET MVC 3
- 10. ASP.NET MVC: poprawne miejsce na częściowe widoki?
- 11. sprintf używając tych samych wartości wiele razy
- 12. Indeks Znalezienie tych samych elementów na liście
- 13. Wiele mirrorów Maven dla tych samych repozytoriów
- 14. Możliwość tworzenia adresów URL "bez kontrolera" za pomocą ASP.NET MVC?
- 15. Routing do działań o tych samych nazwach, ale innych parametrach
- 16. Definiowanie trasy ASP.NET MVC za pomocą ukośników
- 17. Zarządzanie użytkownikami za pomocą ASP.NET MVC 4
- 18. Konfigurowanie IdentityServer za pomocą aplikacji Asp.Net MVC
- 19. Jak ozdobić kontroler ASP.NET MVC za pomocą prostego wtryskiwacza
- 20. Dlaczego łącznik LD dopuszcza wiele definicji klas za pomocą tych samych metod?
- 21. asp.net mvc metoda 4 wywołujący ze sterownika za pomocą przycisku
- 22. Odniesienia do tych samych danych i pamięci alokacji
- 23. Foldery w katalogu kontrolerów w ASP.NET MVC 4
- 24. Jaka jest zaleta korzystania z asynchronicznych kontrolerów w asp.net mvc?
- 25. Jak pisać osobne widoki dla GET i POST
- 26. Walidacja logiki biznesowej w Asp.net MVC za pomocą wyjątków
- 27. Sprawdź ciągi znaków dla tych samych znaków w Objective-C
- 28. Rozwiń ASP.NET mvc beta na iis 6 powodując 404-tych
- 29. Przekierowanie z HTTPS za pomocą aplikacji ASP.NET MVC
- 30. kiedy używać nokaut javascript z ASP.NET MVC
Przypuszczam, że to warto wspomnieć, to jest * planowane * w przypadku MVC 4 http://aspnet.codeplex.com/wikipage?title=ASP.NET%20MVC%204%20RoadMap –
Proszę oznaczyć jako poprawny numer –