2010-09-25 8 views
5

Tôi có một DataList có một bộ sưu tập Những người bị ràng buộc với nó, với mỗi Người có một Nút mà khi được bấm cần phải tạo ra một postback không đồng bộ để trình xử lý sự kiện OnClick có thể thay đổi các chi tiết được hiển thị trong UpdatePanel [DataList nằm ngoài UpdatePanel].Làm cách nào để kích hoạt PostBack không đồng bộ cho UpdatePanel từ nút trong danh sách dữ liệu?

Tôi đã thực hiện hai lần cài đặt Nút để thay đổi UpdatePanel trong trình xử lý sự kiện OnItemDataBound của DataList. Một gán một AsyncPostBackTrigger cho UpdatePanel và cái còn lại là RegisterAsyncPostBackControl tới ScriptManager. Cả hai đều hoạt động nhưng chỉ là lần đầu tiên. Nếu nút của một người khác [hoặc cùng một nút cho lần thứ hai] được nhấn thì trang đó sẽ được đăng lại hoàn toàn.

UpdateMan UpdateMode được đặt thành Có điều kiện và ScriptManager có EnablePartialRenderingEnablePartialRendering được đặt thành true.

Mã trong OnItemDataBound:

Button btnShowNotes = e.Item.FindControl("btnShowNotes") as Button; 

// Trigger 
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger(); 
trigger.ControlID = btnShowNotes.UniqueID; 
trigger.EventName = "Click"; 
upDetails.Triggers.Add(trigger); // UpdatePanel 

// The trigger or this is used, not both 
ScriptManager1.RegisterAsyncPostBackControl(btnShowNotes); 

Khi Async PostBack đầu tiên đã xảy ra có vẻ như để mất tài liệu tham khảo, nhưng chắc chắn điều này có thể được tiếp tục tồn mà không cần phải liên tục rebind DataList? Tôi phải thiếu một cái gì đó trong cách tôi đang cố gắng này.

+0

Tìm kiếm câu trả lời vào cuối tuần có thể sẽ không thành công, nhưng khó chịu [thường] tôi cần điều này giải quyết trước thứ Hai vì các tính năng mới cần phát trực tiếp vào Thứ Hai và đây là điều duy nhất ngăn nó hoàn thành! – Rich

Trả lời

3

Tôi đã đưa ra giải pháp mặc dù tôi không chắc đó là giải pháp tốt nhất/tối ưu nhất. Trên mỗi PostBack trong phương thức Page_Load, tôi vòng qua các mục và đăng ký Aync PostBack để các nút:

if (IsPostBack) 
{ 
    foreach (DataListItem item in gvAllUsers.Items) 
    { 
     btnShowNotes = item.FindControl("btnShowNotes") as ImageButton; 
     ScriptManager1.RegisterAsyncPostBackControl(btnShowNotes); 
    } 
} 
+0

Nếu ai đó có thể đưa ra một cách tốt hơn, tôi sẽ đánh dấu chúng là câu trả lời. Của riêng tôi không thể được cho 11 giờ tiếp theo anyway. – Rich

0

ToolkitScriptManager1.RegisterAsyncPostBackControl (ibtnShowPicker) bạn cần phải đặt trên mã Page_Load ibtnShowPicker là tên id