2012-05-08 25 views
17

Używam nowej wersji beta ASP.NET MVC 4 i staram się stworzyć system, który działa głównie z responsywnym projektem, ale dla jednego konkretnego widoku używam widoku mobilnego do renderowania określonego widoku dla urządzeń mobilnych.Dlaczego widoki mobilne w ASP.NET MVC wyświetlają się inaczej na różnych serwerach?

Moja struktura polega na tym, że mam program Show.cshtml, a po nim mam program Show.mobile.cshtml.

Jeśli udostępniam moją witrynę z mojego urządzenia dla deweloperów poprzez IIS Express, ten widok będzie wyświetlał się poprawnie na iPadzie, telefonie iPhone, telefonie z Androidem i mobilnej Operze, a także działa tak samo, gdy utworzę lokalny publikator w IIS 7.5 na moim dev maszyna.

Problem pojawia się, gdy wdrażamy serwer na żywo, próbowaliśmy wdrożyć na dwóch różnych serwerach. Wtedy widok mobilny będzie wyświetlany tylko na iPhone'ach, bez żadnych innych urządzeń mobilnych. Jest tak konsekwentnie. Nasze serwery zostały skonfigurowane zarówno jako Windows 2003/IIS6, jak i Windows 2008 R2/IIS7.5 i działają tak samo na obu urządzeniach, tylko iPhone otrzymuje widok mobilny.

Co może być tego przyczyną?

Nie dodałem nic niestandardowego w pliku global.asax.

UPDATE

Po kilku dalszych badań wydaje się dla mnie jasne, że zachowanie domyślne dla DisplayMode i telefonów poglądów zależy na fladze Request.Browser.IsMobileDevice. Ta flaga z kolei wydaje się opierać na plikach .browser znajdujących się w folderze Config/Browsers w folderze .NET Framework.

Na moim komputerze dev mam różne pliki .browser niż te, które są obecne na serwerach, na których zostały wdrożone. Do tej pory próbowałem wdrożyć te, które mam na moim komputerze w folderze App_Browsers w aplikacji internetowej, ale to nie rozwiązało mojego problemu. Czy to może być droga?

+0

Czy próbowałeś wypluć swój ciąg agenta użytkownika? Zastanawiam się, czy IIS źle sobie z tym radzi, czy rozwiązuje to inaczej. –

+2

Wydaje mi się, że domyślne wystąpienie DisplayMode zależy od przeglądarek zdefiniowanych w folderze Config \ Browsers-folder framework. Inne badania pokazują, że różnią się one w zależności od różnych maszyn. Czy to jest coś, co jest uaktualniane przez Wep Plattform Installer? – Cros

Odpowiedz

6

To nie jest kompletna odpowiedź na twoje pytanie, ale myślę, że nadal będzie pomocne.

Program ASP.NET nie jest zbyt dobry w rozwiązywaniu problemów z przeglądarką. Mogę więc polecić zaglądanie do 51Degrees.Mobi Foundation. Steven Sanderson ma ładny blogu na ten temat:

Using 51Degrees.Mobi Foundation for accurate mobile browser detection on ASP.NET MVC 3

nie jestem całkowicie pewien, ale powinieneś być w stanie podłączyć to się łatwo do ASP.NET MVC 4 DisplayMode infrastruktury. Tutaj jest dobrym źródłem informacji na ten temat:

51Degrees.mobi and MVC4

+1

Zdecydowałem się pójść tą drogą, ale nie jest to pełna odpowiedź na moje pytanie. Wydaje się, że rozwiązanie IsMobileDevice jest znacznie lepsze niż domyślna implementacja, więc wykorzystam je na razie. – Cros

+0

@ Cros yep, nie jest to pełna odpowiedź na moje pytanie, co również wskazałem. – tugberk

0

Myślałem rozwiązanie dałem poniżej była odpowiedź (to działa na krótką chwilę), ale nadal włączone do złego widzenia po pewnym czasie.

Podobnie jak reszta internetu, zainstalowałem 51 Degrees from Nuget To działa doskonale i jest bardzo łatwy do skonfigurowania


(Poniższa nie działa dla mnie, ale może to nie dla ciebie) http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes

Wygląda na to, że jest to znany błąd: http://aspnetwebstack.codeplex.com/workitem/280?PendingVoteId=280

Według linku codeplex powyżej, należy pamiętać, aby upewnić się co do tego:

Dla małego zestawu projektów dostosować listę zarejestrowanych silników widok (na przykład w Global.asax) należy upewnić się, że odwołują Microsoft.Web.Mvc.FixedRazorViewEngine lub Microsoft. Web.Mvc.FixedWebFormViewEngine, zamiast klas, które są dostarczane w binarnym środowisku runtime

Powiązane problemy