2010-07-27 39 views
6

Trong ASP.Net tôi có một vài điều khiển tùy chỉnh tôi đã thực hiện. Tôi sử dụng jQuery, nơi nó cũng giúp. Vâng, một vấn đề tôi có bây giờ (với cách giải quyết rõ ràng nhưng "xấu") là đối với mỗi điều khiển người dùng, tôi cần thực thi một số mã từ bên trong pageLoad ($(document).ready sẽ không hoạt động với bảng cập nhật).Cách tốt nhất để xử lý javascript trong Kiểm soát tùy chỉnh là gì?

Vì vậy, bây giờ vấn đề của tôi. Tôi cần có hai điều khiển tùy chỉnh đính kèm với sự kiện pageLoad.

Cách tốt nhất để làm điều này là gì?

tôi có thể không chỉ làm

old_pageLoad=pageLoad 
pageLoad=function(){... old_pageLoad();} 

vì các điều khiển tùy chỉnh có thể được sử dụng nhiều hơn một lần trên một trang và kịch bản cần phải chạy cho mỗi trường hợp duy nhất của điều khiển, cộng với những gì nếu tôi có 3 các điều khiển tùy chỉnh khác nhau trên trang?

phương pháp duy nhất mà tôi đưa ra là một cái gì đó như thế này mà có vẻ siêu hackish:

old_pageLoad_<%= MyStaticClass.GetUniqueID() %>=pageLoad; 
pageLoad=function(){... old_pageLoad_<%= MyStaticClass.GetUniqueID() %>();} 

Có cách nào tốt hơn về xử lý xung đột chức năng như thế này?

Tôi cũng đã xem this MSDN article nhưng những gì nó cho thấy có vẻ tệ hơn tôi hiện đang làm.

Trả lời

1

Sử dụng phương thức RegisterStartupScript của ScriptManager. Bạn chuyển một tham chiếu đến điều khiển của bạn trong khi đăng ký tập lệnh và đảm bảo rằng tập lệnh khởi chạy được chạy bất cứ khi nào điều khiển được cập nhật (tải trên trang đầu tiên hoặc khi UpdatePanel được cập nhật).

+0

Yea nhưng sau đó tôi phải đối xử với javascript của tôi như dây đàn (trong codebehind) có nghĩa là không làm nổi bật cú pháp và bạn phải dùng đến một trong hai chuỗi concat hoặc thay thế chuỗi để chèn server-side thứ – Earlz

+0

@Earlz: Đây là lý do tại sao bạn đặt phần lớn mã của bạn vào một tệp .js bên ngoài và chỉ đặt một cuộc gọi hàm đơn giản (có thể với đối số kiểm soát cụ thể) vào tập lệnh cho RegisterStartupString. Tôi sử dụng một nhà văn JS tùy chỉnh để xây dựng các chuỗi đối số vì vậy tôi không phải lo lắng về việc thoát và không có điều gì. –

+0

Tôi cố gắng làm điều này nhưng khi tôi cần đọc giá trị của 10 thứ khác nhau, 10 đối số cho một hàm dài một chút. – Earlz

0

Một cách khác là thêm trình xử lý gọi phương thức Javascript khi kết thúc đăng lại không đồng bộ. Tôi đã thực hiện điều này trong nhiều trường hợp để khởi tạo lại hộp thoại jQuery. Ví dụ.

$().ready(function() { 
    myInitMethod(); 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myInitMethod); 
}); 

function myInitMethod() } 
    // Init code 
} 
Các vấn đề liên quan