2011-09-30 33 views
6

Tôi đang làm mới một UpdatePanel với javscript bằng cách gọi một phương pháp như vậy:Gọi lại sau __doPostBack()?

reloadDropDown = function (newValue) 
{ 
    __doPostBack("DropDown1", ""); 
    selectNewValueInDropDown(newValue); 
} 

Bên trong UpdatePanel tôi là một hộp <select> rằng tôi cần phải chọn một <option> với một newValue. Vấn đề của tôi là phương pháp selectNewValueInDropDown của tôi đang được gọi trước khi hoàn thành __doPostBack. Có cách nào tôi có thể "chờ" cho postback trước khi gọi phương thức selectNewValueInDropDown của tôi không?

Trả lời

11

Để làm cho nhận xét của tôi cụ thể hơn, đây là ý tưởng:

reloadDropDown = function (newValue) 
{ 
    var requestManager = Sys.WebForms.PageRequestManager.getInstance(); 

    function EndRequestHandler(sender, args) { 
     // Here's where you get to run your code! 
     selectNewValueInDropDown(newValue); 

     requestManager.remove_endRequest(EndRequestHandler); 
    } 
    requestManager.add_endRequest(EndRequestHandler); 

    __doPostBack("DropDown1", ""); 
} 

Tất nhiên, bạn có thể muốn để xử lý điều kiện chủng tộc nơi hai yêu cầu chồng lên nhau. Để xử lý điều đó, bạn cần phải theo dõi trình xử lý nào có yêu cầu nào. Bạn có thể sử dụng một cái gì đó như ScriptManager.RegisterDataItem ở phía máy chủ hoặc gọi args.get_panelsUpdated() và kiểm tra xem bảng điều khiển mà bạn quan tâm có được cập nhật hay không.

+0

Tuyệt vời. Cảm ơn bạn! – RayLoveless

6
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); 
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
function BeginRequestHandler(sender, args) 
{ 
    // 
} 
function EndRequestHandler(sender, args) 
{ 
    //request is done 
} 
+0

Nhưng thông số của tôi sẽ xuất hiện ở đâu? Tôi cũng sẽ cần một phương pháp điểm vào duy nhất. –

+0

Bạn sẽ phải xảo quyệt với JavaScript và đặt một số biến trạng thái để biết khi nào nên kích hoạt phương thức của bạn. Khi bạn chiếm quyền điều khiển khung/quy trình, bạn sẽ thấy nó. –

+0

@BrianDavidBerman: Bạn có thể viết một hàm gọi 'selectNewValueInDropDown (newValue)' sau đó gọi 'Sys.WebForms ... remove_endRequest (theFunction)' để loại bỏ chính nó như một trình xử lý sự kiện. –

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