动态自定义 asp.net 控件:ID 属性?

Dynamic custom asp.net control : ID property?

我想创建一个自定义控件:一个数字文本框。 我遵循了本教程 (http://www.codeproject.com/Articles/42382/Creating-a-Numeric-TextBox-Control),但我遇到了问题。 我想像那样动态创建这些控件:

NumericTextBox _Quantity = new NumericTextBox();
_Quantity.ID = "_Quantity" + id;
_Quantity.Text = "1";

但是据说NumericTextBox中的"ID"属性没有定义。然而,这个控件是 TextBox 的子控件,所以它应该有 ID 属性,就像 Text 的 ID 一样工作得很好...

using System;
using System.Web.UI;

[assembly: WebResource("CustomControls.Resources.NumericTextBox.js", "text/javascript")]
namespace CustomControls
{
    [ToolboxData(@"<{0}:NumericTextBox ID="""" Text="""" runat=""server""></{0}:NumericTextBox>")]
    public partial class NumericTextBox : System.Web.UI.WebControls.TextBox
    {
        // specific code
    }
}

我错过了什么吗?如果我能让这个 属性 工作,FindControl 方法是否可以与自定义控件一起工作?

非常感谢!

编辑:

我的解决方案中有两个项目:

这是我页面的提取代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
using CustomControls;

public partial class MyPage : System.Web.UI.Page
{
    protected void AddItem(Enum type, Enum content)
    {
        string id = (content != null) ? content.ToString() : type.ToString();
        ...

        NumericTextBox _Quantity = new NumericTextBox();
        _Quantity.ID = "_Quantity" + id;
        _Quantity.Text = "1";

        ...
    }
}

这很奇怪,在我的代码中它完美运行:

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

namespace ButtonTest2
{
    [ToolboxData(@"<{0}:NumericTextBox ID="""" Text="""" runat=""server""></{0}:NumericTextBox>")]
    public partial class NumericTextBox : TextBox
    {

    }
}

实例化:

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

namespace ButtonTest2
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            NumericTextBox tb = new NumericTextBox();
            tb.ID = "123";
        }
    }
}

您是否错过了在 class 中创建 NumericTextBox 实例 的一些用法?

编辑 FindControl 应该可以使用您的自定义控件。