2012-05-22 44 views
10

Tôi đang phát triển ứng dụng web di động. Tôi cần để có được displaymode hiện tại là điện thoại di động trong bộ điều khiển.Cách hiển thị mã hiển thị hiện tại trên thiết bị di động theo mvc4

Vấn đề của tôi là: Tôi có 2 PartialView

/Views/Shared/ListItem.cshtml 
/Views/Shared/ListItem.mobile.cshtml 

khi sử dụng PartialView ("ListItem") đây là hoạt động chính xác. Nhưng tôi cần phải đặt partialviews trong sub folder

/Views/Shared/Modules/Post/ListItem.cshtml 
/Views/Shared/Modules/Post/ListItem.mobile.cshtml 

Khi tôi sử dụng PartialView ("~/Views/Shared/Modules/Post/ListItem.cshtml") công trình này trên máy tính để bàn. khi displaymode là di động, ListItem.mobile.cshtml không được hiển thị.

sự lựa chọn của tôi là

if(CurrentDisplayMode==Mobile){ 
    PartialView("~/Views/Shared/Modules/Post/ListItem.mobile.cshtml"); 
else 
    PartialView("~/Views/Shared/Modules/Post/ListItem.cshtml"); 

Làm thế nào để có được CurrentDisplayMode? Làm thế nào để giải quyết vấn đề này?

Trả lời

1

kiểm tra giá trị của:. HttpContext.GetOverriddenBrowser() IsMobileDevice

+0

GetOverridenBrowser không được tìm thấy – ebattulga

+1

Bạn có nằm trong bộ điều khiển hoặc trong chế độ xem không? trong quan điểm bạn cần phải thêm viewcontext.httpcontex ..... – JTMon

+0

Quên thêm rằng bạn cần phải có câu lệnh sau: sử dụng System.Web.WebPages; – JTMon

0

Tôi tin MS muốn bạn sử dụng this:

controller.ControllerContext.DisplayMode 

Nó hoạt động nhưng tôi tìm thấy hai vấn đề lớn với nó (tính đến ngày của bài đăng này):

  1. Kiểm tra đơn vị. Không thể đặt thuộc tính DisplayMode theo cách thủ công (ném NullReferenceException) và không thể được mô phỏng vì nó không phải là ảo.
  2. Nó không hoạt động với MvcDonutCaching. DisplayMode chỉ trả về NULL khi yêu cầu phần được lưu trong bộ nhớ cache của trang.
+1

Bạn có chắc điều này hoạt động trong Bộ điều khiển không? –

0

Tùy chọn tốt nhất mà bạn có là kiểm tra trường đại lý người dùng Tiêu đề yêu cầu, nơi bạn có thể nghe cho iPhone android, v.v. như vậy, đây là một giải pháp và cho phép bạn giới hạn những gì bạn hỗ trợ như hầu hết các công ty làm.

7

Tôi cũng cần truy cập chế độ hiển thị hiện tại để tôi có thể điều chỉnh mô hình xem đã được chuyển sang chế độ xem (ít thông tin hơn trong chế độ xem di động để nó có thể được hiển thị từ kiểu xem nhỏ hơn).

ControllerContext.DisplayMode không thể được sử dụng vì nó sẽ được đặt sau khi hành động đã được thực thi.

Vì vậy, bạn phải xác định chế độ hiển thị dựa trên ngữ cảnh (user agent, cookie, kích thước màn hình, vv ...)

Dưới đây là một nice trick I found on the ASP.NEt forums mà sẽ cho phép bạn xác định các chế độ hiển thị bằng cách sử dụng cùng một logic mà sau này sẽ được sử dụng bởi khung:

public string GetDisplayModeId() 
{ 
    foreach (var mode in DisplayModeProvider.Instance.Modes) 
     if (mode.CanHandleContext(HttpContext)) 
      return mode.DisplayModeId; 

    throw new Exception("No display mode could be found for the current context."); 
} 
+0

Điều này dường như trả lời câu hỏi của OP chính xác nhất –

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