使用Container实例化一个控件

时间:2014-08-26 11:34:49

标签: asp.net asp.net-webcontrol

我的自定义容器有问题。 当我实例化一个控件时,实例化控件的数量变为3 !!!

它很难解释,所以让我在我的代码中描述它 这是我的孩子控制类代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication2
{
    public class Child:System.Web.UI.Control
    {
    }
}

这是MyContainer类代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;

namespace WebApplication2
{
    public class MyContaner:System.Web.UI.WebControls.WebControl,INamingContainer
    {
        [PersistenceMode(PersistenceMode.InnerProperty)]
        public ITemplate ChildControls { get; set; }

        protected override void CreateChildControls()
        {
           var cl = new Child();
           ChildControls.InstantiateIn(cl);
           var x=cl.Controls.Count;
           this.Controls.Add(cl);

        }
    }

}

这是我的aspx页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>
<%@ Register Assembly="WebApplication2" Namespace="WebApplication2" TagPrefix="t" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>

<body>
    <form id="form1" runat="server">
    <div>

        <t:MyContainer runat="server">
            <ChildControls>
                <asp:TextBox runat="server"></asp:TextBox>
            </ChildControls>
        </t:MyContainer>


    </div>
    </form>
</body>
</html>

所以,当我运行此行时:ChildControls.InstantiateIn(cl);我的cl.Controls.Count变为3.尽管我只有 我希望它返回1。

我错过了什么吗?如果我想获得精确的儿童控制,我该怎么办?

谢谢大家。

1 个答案:

答案 0 :(得分:0)

经过漫长的斗争,我发现它是什么。

在我的ChildControls模板中我有2 /r/n并且他们已经转换为LiteralControl

所以我有2个新行和我的asp:textBox所以它返回3。