2008-10-28 26 views
14

Bên trong trang của tôi, tôi đã điều sau đây:ASP.NET UserControl của Không khởi Child Controls

<aspe:UpdatePanel runat="server" ID="updatePanel"> 
    <ContentTemplate> 
     <local:KeywordSelector runat="server" ID="ksKeywords" /> 
    </ContentTemplate> 
</aspe:UpdatePanel> 

Việc kiểm soát KeywordSelector là một điều khiển tôi xác định trong cùng một assembly và local được ánh xạ tới namespace của nó.

Việc kiểm soát được tạo thành từ một số điều khiển khác và được định nghĩa như vậy:

<%@ Control Language="C#" AutoEventWireup="true" 
      CodeBehind="KeywordSelector.ascx.cs" 
      Inherits="Keywords.KeywordSelector" %> 

và có khá một vài điều khiển máy chủ của riêng nó, tất cả định nghĩa là các thành viên trong file .designer.cs.

Tuy nhiên, trong không có phần nào của vòng đời của kiểm soát nó có bất kỳ đối tượng kiểm soát trẻ em cũng không tạo ra HTML:

  1. Tất cả các thành viên được định nghĩa trong tập tin .designer.csnull.
  2. Gọi tới HasControls trả lại false.
  3. Gọi tới EnsureChildControls không phải làm gì cả.
  4. Bộ sưu tập Controls trống.

Xóa UpdatePanel không tốt. Tôi đã cố gắng tái tạo nó trong một trang sạch sẽ với một UserControl mới và điều tương tự cũng xảy ra.

Tôi đang sử dụng ASP.NET trên .NET Framework 3.5 SP1 với máy chủ web tích hợp.

Tôi thiếu gì ở đây?

Cập nhật # 1: Theo nhận xét của Rob, tôi xem xétvà không phát hiện thấy nó có bất kỳ điều khiển con nào. Hơn nữa, CreateControlCollection không bao giờ được gọi!

+0

Bạn tự động tải điều khiển này? – thismat

+0

Không. Đọc về những người quá ... –

+0

Bạn đã ghi đè OnInit và xóa cơ sở dòng.OnInit (e); Trong vụ tai nạn? – Rob

Trả lời

24

Vâng, tôi đã tìm thấy các vấn đề (s):

  1. tài Controls, như trái ngược với Custom Controls phải đăng ký một-by-một trong web.config tập tin. Làm điều này:

    <add tagPrefix="local" tagName="KeywordSelector" src="~/KeywordSelector.ascx" />

    thay vì:

    <add tagPrefix="local" namespace="Keywords" assembly="Keywords" />

  2. Bạn không bao giờ nên đặt một WebControl trong cùng thư mục với các Control đó là sử dụng nó. Điều này là hết sức ngớ ngẩn. Read about it here.

Cảm ơn sự giúp đỡ. Bây giờ, nếu tôi chỉ có thể đánh dấu câu trả lời của riêng mình là câu trả lời ...

+2

Oh của tôi, cảm ơn bạn cho một giải pháp :) –

+0

Vui mừng nó đã giúp người khác :) –

+0

Chỉ cần bỏ ra hàng giờ cố gắng để giải quyết điều này! Rất khó hiểu vấn đề (và quá nhiều truy cập sai tích cực khi cố gắng Bing một câu trả lời cho nó). Cảm ơn! –

0

Trong trường hợp của tôi lý do được các Resharper 7.1 thêm chỉ thị @Register không chính xác ở đầu aspx - thay vì hàng mong muốn này:

<%@ Register Src="~/Controls/Hello/Hello.ascx" TagName="Hello" TagPrefix="p" %> 

tôi đã nhận sai một:

<%@ Register TagPrefix="p" Namespace="MyNamespace.WebApp.Controls" Assembly="MyApp.Web" %> 
Các vấn đề liên quan