2008-10-27 29 views
12

Tôi đã có một UserControl chứa UpdatePanel. Khi tôi đặt trên một trang, nó ném các lỗi sau:Điều gì gây ra lỗi 'Không thể hủy đăng ký UpdatePanel'?

Cannot unregister UpdatePanel with ID 'ReviewContentUpdatePanel' since it was not registered with the ScriptManager. This might occur if the UpdatePanel was removed from the control tree and later added again, which is not supported. Parameter name: updatePanel

ReviewContentUpdatePanel là tên của bảng điều khiển cập nhật & nó không được gỡ bỏ hoặc thêm vào trong mã, nó tồn tại trong trang aspx và không được cắt bỏ . Đa co ai đi ngang qua đây chưa?

+0

Các bạn đã có một ScriptManager trên trang chứa UserControl? – tvanfosson

+0

yep và scriptproxy trên usercontrol –

+1

Bạn có thể đăng mã không? Hầu hết các tham chiếu đến thỏa thuận lỗi này với việc thêm updatepanels/controls tự động. Kiểm soát người dùng có được thêm động không? – tvanfosson

Trả lời

4

Bạn có đang di chuyển các điều khiển về mã không? Nếu vậy hãy xem here và xem điều này có giải quyết được vấn đề của bạn hay không.

+0

Tôi không di chuyển * bất kỳ thứ gì * xung quanh trong mã, không có gì tương tác với bảng cập nhật hoặc người dùng containg của nó trong mã –

+0

Bạn có thể đăng một số mã mẫu hay không (nếu nó không phải là nhạy cảm đó là) – DilbertDave

+0

Bỏ qua điều đó - tôi vừa xem các bình luận trong bài viết khác. Mới đối với SO! – DilbertDave

1

Trong đánh dấu của bạn, hãy đảm bảo bạn đã chỉ định ID cho cả UpdatePanels và cho mọi điều khiển runat = "server" trong thứ bậc gốc của chúng.

5

Lỗi này xảy ra khi bộ sưu tập Điều khiển trong đó UpdatePanel được cư trú bị xóa bằng cách sử dụng Clear method hoặc khi UpdatePanel cụ thể bị xóa bằng cách sử dụng Remove method.

Trình kích hoạt cho các phương pháp này có thể là việc triển khai CreateChildControls method cho điều khiển chứa UpdatePanel. Thông thường, bạn gọi Controls.Clear() ở phía trên cùng của phương thức này, để bắt đầu với một slate sạch nếu phương thức này được gọi nhiều lần.

3

Tôi đã xảy ra điều này một lần trước đây. Để khắc phục nó, tôi chỉ xóa nó và sau đó tạo lại nó và vấn đề đã biến mất.

0

Bạn đã thử bao gồm một ScriptManagerProxy trong điều khiển người dùng?

0

Cố gắng loại bỏ scriptproxy của UserControl. Trong trường hợp này, bạn chỉ có một ScriptManager trên trang của bạn.

0

Đây là một chút dài, nhưng tôi đã có kinh nghiệm với các phần mở rộng AJAX, cụ thể với bảng cập nhật, trong đó các lỗi do điều khiển con được trình bày là lỗi khác do bảng điều khiển cập nhật. Tôi đã thấy một tham chiếu đến lỗi cụ thể này bị ném do một lỗi trong một điều khiển con:

http://msmvps.com/blogs/shareblog/archive/2009/03/11/cannot-unregister-updatepanel-with-id-since-it-was-not-registered-with-the-scriptmanager-and-moss.aspx

Không chắc nếu đây là trường hợp cho bạn hay không, nhưng tôi đã dành nhiều giờ đuổi xuống các lỗi sai vì điều này.

2

Tôi hy vọng điều này sẽ giúp người khác vì điều đó khiến tôi phát điên. Sau khi tìm thấy nhiều mẩu thông tin khác nhau ở đây và ở đây và ở nơi khác, cuối cùng tôi đã đưa ra bản sửa lỗi sau. Lưu ý, tôi không tự động tạo bảng cập nhật này ở đây hoặc bất kỳ nơi nào khác và hầu hết thông tin ngoài đó có liên quan đến việc tạo điều khiển động này, điều mà tôi không có.

Tôi đã sử dụng bảng điều khiển cập nhật bên trong điều khiển người dùng web được sử dụng trên trang được thừa kế bởi trang chính với trình quản lý tập lệnh. Tôi không biết nếu kết hợp này là những gì đã gây ra nó, nhưng đây là cách tôi cố định nó (bên trong điều khiển người dùng web nơi mà các bảng cập nhật được sử dụng):

protected override void OnInit(EventArgs e) 
{ 
    ScriptManager sm = ScriptManager.GetCurrent(this.Page); 
    MethodInfo m = (
    from methods in typeof(ScriptManager).GetMethods(
     BindingFlags.NonPublic | BindingFlags.Instance 
     ) 
    where methods.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel") 
    select methods).First<MethodInfo>(); 

    m.Invoke(sm, new object[] { updatePanel }); 
    base.OnInit(e); 
} 
+0

Tôi cần xóa và thêm lại điều khiển người dùng có chứa bảng cập nhật trong một số trường hợp. Tôi re-jiggered mã của tôi để gọi một cái gì đó như phương pháp này chỉ sau khi thêm lại kiểm soát người dùng, và nó làm việc. Cảm ơn rất nhiều! – user12861

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