2010-06-09 48 views
8

Chúng tôi vừa cập nhật ứng dụng của chúng tôi từ ASP.Net 2.0 lên ASP.Net 4.0.Cài đặt chính xác của ClientIDMode trong ASP.Net 4 là gì để hiển thị ASP.Net 2.0.

Chúng tôi đã bao gồm trong web.config trong các yếu tố <system.web>:

<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" /> 

hiểu biết của tôi là điều này có nghĩa vụ phải làm cho các điều khiển giống như Net 2.0/3.5 sẽ.

Tuy nhiên ... nó không phải ... đây là một ví dụ

này được kết xuất trong 2.0:

<input id="grdUserEntity__ctl1_chkSelectAll" type="checkbox" 
    name="grdUserEntity:_ctl1:chkSelectAll" onclick="javascript:iSelectAll();" /> 

Đây là trong 4.0:

<input id="grdUserEntity_ctl01_chkSelectAll" type="checkbox" 
    name="grdUserEntity$ctl01$chkSelectAll" onclick="javascript:iSelectAll();" /> 

Sự khác biệt:

2.0 id=grdUserEntity__ctl1_chkSelectAll 
4.0 id=grdUserEntity_ctl01_chkSelectAll 

Theo với những gì tôi đọc thiết lập cấu hình đó sẽ gây ra ASP.Net 4.0 để hiển thị các điều khiển máy chủ và id ứng dụng giống hệt với phiên bản trước đó.

Chúng ta đang làm gì sai?

Trả lời

12

Có thay đổi về cách ID được hiển thị từ ASP.NET 2.0 đến ASP.NET 3.5. Vì bạn đang đi từ 2,0 đến 4,0, bạn vẫn thấy sự khác biệt đó. Thay đổi này là do cải tiến tuân thủ XHTML.

Bạn có thể thử chuyển về chế độ hiển thị 2.0 với cài đặt tương thích xhtmlCompliance. Tuy nhiên, một thiết lập compat khác, có :) Nó sẽ làm việc, nhưng thành thật mà nói, tôi không chắc chắn như thế nào thử nghiệm rằng thiết lập compat cũ là 4.0, và tôi biết nó sẽ không tương thích với UpdatePanel, nếu bạn đang có kế hoạch sử dụng cái đó.

Có lý do nào khiến bạn muốn hiển thị 2.0 không? Chỉ lo sợ hồi quy, hoặc bạn có bất kỳ hồi quy thực tế nào không?

XHTML thiết lập: http://msdn.microsoft.com/en-us/library/ms178159.aspx

+2

Chúng tôi có javascript dựa trên cách hiển thị 2.0. Vì vậy, có, chúng tôi có một số vấn đề hồi quy bây giờ. – PilotBob

+0

Có ... điều này giải quyết sự hồi quy. Cảm ơn nhiều. – PilotBob

+0

Tuyệt vời! Tốt để nghe. – InfinitiesLoop

1

Đối với độc giả tương lai của bài viết này, bạn có thể giảm thiểu vấn đề tương thích bằng cách sử dụng các cấu trúc <%=objectid.ClientId %> trong trang ASP.NET của bạn.

Ví dụ: Giả sử bạn đặt hộp văn bản là txtInput (mà ASP.NET hiển thị là id = ctl00_cphMainContent_txtInput) mà bạn cần tham chiếu trong một số mã javascript phía máy khách. Bạn có thể tham khảo đối tượng với mã javascript sau trong trang ASP.NET của bạn:

str txtInputObjNm = "<%=txtInput.ClientId %>"; 

Khi chạy, nó sẽ tự động dịch sang các client-side sau javascript:

str txtInputObjNm = "ctl00_cphMainContent_txtInput"; 

Nếu .NET "quyết định" để thay đổi cách clientid được chỉ định, mã của bạn sẽ vẫn hoạt động.

+5

giả định này tất nhiên là bạn đặt nội tuyến javascript của bạn trên biểu mẫu web. Chúng tôi thích sử dụng javascript không phô trương và không làm điều này. – PilotBob

1

Trong ứng dụng 4.0 pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" sẽ làm hỏng hoàn toàn kiểu dáng trong trang Site.master. Ví dụ, các menu sẽ gần như vô hình trong nhà thiết kế và sẽ mất hoàn toàn kiểu dáng của chúng trong trình duyệt. Về cơ bản, kiểu dáng sẽ bị mất trong nhà thiết kế.

Tôi đã tìm thấy điều này bằng cách đặt khung mục tiêu từ 4.0 đến 3.5 và quay lại 4.0. Sau này, kiểu dáng đã được pha trộn. Sau khi so sánh tất cả các tệp với một ứng dụng tốt, cuối cùng tôi đã tìm thấy dòng này trong web.config. Tôi đã xóa nó và các vấn đề về kiểu tóc của tôi biến mất.

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