tôi đã xây dựng một tùy chỉnh WebControl, trong đó có cơ cấu như sau:Render nhiều bộ sưu tập kiểm soát trong ASP.NET điều khiển tùy chỉnh
<gws:ModalBox ID="ModalBox1" HeaderText="Title" runat="server">
<Contents>
<asp:Label ID="KeywordLabel" AssociatedControlID="KeywordTextBox" runat="server">Keyword: </asp:Label><br />
<asp:TextBox ID="KeywordTextBox" Text="" runat="server" />
</Contents>
<Footer>(controls...)</Footer>
</gws:ModalBox>
Việc kiểm soát chứa hai thuộc tính ControlCollection, 'Nội dung' và 'Footer'. Không bao giờ cố gắng để xây dựng một điều khiển với nhiều bộ sưu tập kiểm soát, nhưng giải quyết nó như thế này (giản thể):
[PersistChildren(false), ParseChildren(true)]
public class ModalBox : WebControl
{
private ControlCollection _contents;
private ControlCollection _footer;
public ModalBox()
: base()
{
this._contents = base.CreateControlCollection();
this._footer = base.CreateControlCollection();
}
[PersistenceMode(PersistenceMode.InnerProperty)]
public ControlCollection Contents { get { return this._contents; } }
[PersistenceMode(PersistenceMode.InnerProperty)]
public ControlCollection Footer { get { return this._footer; } }
protected override void RenderContents(HtmlTextWriter output)
{
// Render content controls.
foreach (Control control in this.Contents)
{
control.RenderControl(output);
}
// Render footer controls.
foreach (Control control in this.Footer)
{
control.RenderControl(output);
}
}
}
Tuy nhiên có vẻ như hiển thị chính xác, nó không hoạt động nữa nếu tôi thêm một số nhãn asp.net và đầu vào kiểm soát bên trong tài sản (xem mã asp.net ở trên). Tôi sẽ nhận được HttpException:
Không thể tìm thấy quyền kiểm soát với id 'KeywordTextBox' mà được liên kết với Nhãn 'KeywordLabel'.
Có thể dễ hiểu vì nhãn xuất hiện trước hộp văn bản trong bộ sưu tập kiểm soát. Tuy nhiên, với điều khiển asp.net mặc định nó hoạt động, vậy tại sao nó không hoạt động? Tôi đang làm gì sai? Thậm chí có thể có hai bộ sưu tập kiểm soát trong một điều khiển không? Tôi có nên làm cho nó khác đi không?
Cảm ơn bạn đã trả lời.
Có điều này sẽ làm việc! –