2012-05-08 29 views
17

Tôi đang sử dụng ASP.NET MVC 4 beta mới và đang cố tạo một hệ thống chủ yếu hoạt động với thiết kế đáp ứng, nhưng đối với một chế độ xem cụ thể, tôi đang sử dụng chế độ xem trên thiết bị di động để hiển thị chế độ xem cụ thể cho thiết bị di động.Tại sao số lượt xem trên thiết bị di động trong ASP.NET MVC hiển thị khác nhau trên các máy chủ khác nhau?

Cấu trúc của tôi đơn giản là tôi có Show.cshtml và sau đó tôi có Show.mobile.cshtml.

Nếu tôi làm cho trang web của mình có sẵn từ máy tính của tôi thông qua IIS Express, chế độ xem này hiển thị chính xác cho iPad, iPhone, điện thoại Android và Opera di động, và nó cũng hoạt động tương tự nếu tôi xuất bản cục bộ sang IIS 7.5 trên dev của tôi máy móc.

Sự cố xảy ra khi chúng tôi triển khai một máy chủ trực tiếp, chúng tôi đã thử triển khai trên hai máy chủ khác nhau. Sau đó, chế độ xem trên thiết bị di động sẽ chỉ được phân phát cho iPhone, không có thiết bị di động nào khác. Điều này là nhất quán như vậy. Các máy chủ của chúng tôi được thiết lập là cả Windows 2003/IIS6 và Windows 2008 R2/IIS7.5 và nó hoạt động giống nhau trên cả hai, chỉ có iPhone được phục vụ chế độ xem di động.

Nguyên nhân có thể là gì?

Tôi chưa thêm bất kỳ tùy chỉnh nào trong global.asax cho việc này.

CẬP NHẬT

Sau khi một số nghiên cứu hơn nó có vẻ rõ ràng với tôi rằng hành vi mặc định cho DisplayMode và quan điểm di động phụ thuộc vào lá cờ Request.Browser.IsMobileDevice. Cờ này lần lượt dường như dựa vào các tệp .browser trong thư mục Config/Browsers của thư mục .NET Framework.

Trên máy tính dev của tôi, tôi có các tệp .browser khác với tệp có trên các máy chủ mà tôi đã triển khai. Cho đến nay tôi đã cố gắng triển khai những cái tôi có trên máy của mình trong thư mục App_Browsers của ứng dụng web, nhưng điều đó không khắc phục được sự cố của tôi. Đây có phải là con đường để đi không?

+0

Bạn đã thử nhổ chuỗi tác nhân người dùng của mình chưa? Tôi đang tự hỏi liệu IIS đang rối tung với nó hay giải quyết nó một cách khác nhau. –

+2

Dường như với tôi rằng trường hợp mặc định của DisplayMode phụ thuộc vào các trình duyệt được định nghĩa trong thư mục Config \ Browsers của thư mục khung. Một số nghiên cứu thêm cho thấy rằng những khác biệt này trên các máy khác nhau. Đây có phải là cái gì đó được uppdated thông qua Wep Plattform Installer? – Cros

Trả lời

6

Đây không phải là câu trả lời hoàn chỉnh cho câu hỏi của bạn nhưng tôi nghĩ nó vẫn sẽ giúp ích.

ASP.NET không giỏi giải quyết các khả năng của trình duyệt theo kinh nghiệm của tôi. Vì vậy, tôi có thể khuyên bạn nên xem xét 51Degrees.Mobi Foundation. Steven Sanderson có một bài đăng blog đẹp trên rằng:

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

Tôi không hoàn toàn chắc chắn nhưng bạn sẽ có thể móc này lên một cách dễ dàng để ASP.NET MVC cơ sở hạ tầng 4 DisplayMode. Dưới đây là một nguồn lực tốt trên rằng:

51Degrees.mobi and MVC4

+1

Tôi đã quyết định đi tuyến đường này, nhưng nó không phải là một câu trả lời hoàn chỉnh cho câu hỏi của tôi tôi nghĩ. 51Degrees dường như giải quyết IsMobileDevice tốt hơn rất nhiều so với việc triển khai mặc định, vì vậy tôi sẽ sử dụng nó trong thời gian này. – Cros

+0

@ Có thể không, không phải là câu trả lời hoàn chỉnh cho câu hỏi của tôi vì tôi cũng đã chỉ ra. – tugberk

0

Tôi nghĩ giải pháp tôi đưa ra dưới đây là câu trả lời (nó làm việc một thời gian ngắn), nhưng nó vẫn chuyển sang quan điểm sai sau một thời gian.

Giống như phần còn lại của internet, tôi đã cài đặt 51 Degrees from Nuget này đang làm việc một cách hoàn hảo, và rất dễ dàng để thiết lập


(dưới đây không làm việc cho tôi, nhưng có lẽ nó không cho bạn) http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes

Hình như đó là một lỗi được biết: http://aspnetwebstack.codeplex.com/workitem/280?PendingVoteId=280

Theo liên kết CodePlex trên, hãy nhớ để đảm bảo điều này:

Đối với một nhóm nhỏ các dự án tùy chỉnh danh sách các thành viên cơ quan điểm (ví dụ, trong Global.asax), bạn nên chắc chắn rằng bạn đang tham chiếu Microsoft.Web.Mvc.FixedRazorViewEngine hoặc Microsoft. Web.Mvc.FixedWebFormViewEngine, thay vì các lớp mà gửi trong mã nhị phân thời gian chạy lõi

Các vấn đề liên quan