2011-09-01 31 views
5

Tôi có một trang đơn giản, đó là cấu trúc như sau (pseudo code):UIWebView và IPhone nội dung không postback (ASP.NET vấn đề trình duyệt Capability)

<aspx page> 
    <ascx control> 
     <asp:dropdownlist id="dd1" autoPostback=true /> 
     <asp:dropdownlist id="dd2" /> 
    </ascx control> 
</aspx page> 

Trong bất kỳ trình duyệt máy tính để bàn, bài DD1 trở lại và sự kiện máy chủ "SelectedIndexChanged" được kích hoạt. Tuy nhiên trong safari IPhone hoặc một webview IPhone, không có postback được thực hiện. Tôi biết điều này bởi vì không có chỉ báo hoạt động mạng nào được hiển thị và tôi đã ghép một trình gỡ rối đến trang web nắm bắt tất cả các sự kiện serverside và nó không bao giờ bị tấn công. Đôi khi, khoảng một lần mỗi 2 giờ, các postback làm việc trên iphone, nhưng rất hiếm khi và không liên tục.

Dd1 là danh sách thả xuống ngày tải trình đơn thời gian thả xuống phụ thuộc vào mục đã chọn trong menu thả xuống ngày. Biểu mẫu này được tái sử dụng ở nhiều nơi và tôi không muốn thay đổi cấu trúc cơ bản trừ khi đó là nỗ lực mương cuối cùng.

Javascript được bật trong cài đặt safari.

Đủ đơn giản phải không? Tôi đang cố gắng tìm hiểu làm thế nào để gỡ lỗi javascript lỗi trên một webview, nhưng tôi đã tự hỏi nếu có ai biết những gì kỳ lạ nó đã tạo ra hành vi này.

Trả lời

7

Tác nhân người dùng của UIWebView IPhones không được công nhận bởi ASP.NET 4.0, vì vậy asp.net được cung cấp dưới dạng mặc định, phiên bản Downlevel của trang không bao gồm javascript. Các iphones webview user agent là:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_5 như Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, như Gecko) Điện thoại di động/8L1

Để tránh điều đó xảy ra, tôi đã thay đổi thuộc tính "ClientTarget" của trang thành "UpLevel" mà bỏ qua asp.net cố gắng tìm ra khả năng của trình duyệt và chỉ phục vụ lên một phiên bản "Uplevel" javascript và tất cả.

Giải pháp trong Page_Load trang của tôi:

Me.ClientTarget = "uplevel"

hoặc

this.ClientTarget = "uplevel";

+1

Đây là loại hack. Nó sạch hơn để sửa App_Browsers hoặc cập nhật danh sách trình duyệt toàn cầu. Xem workaround được đăng bởi pravav rastogi (làm việc cho Microsoft) tại http://connect.microsoft.com/VisualStudio/feedback/details/631438 – Brian

+0

Trong các ý kiến ​​trong liên kết mà ai đó đề cập đến sửa chữa sẽ được phát hành trong thời gian chạy asp.net tiếp theo phát hành ... như vậy là cố định trong .net 4.5? –

+0

Xin lỗi, nhưng tôi không biết. Bạn có thể thử cài đặt nó và xem bản sao của tập tin trình duyệt có được cập nhật hay không. Chạy một diff trên '\ Windows \ Microsoft.NET \ Framework [X1] \ v [X2] \ Config \ Trình duyệt \ *'. – Brian

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