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

时间:2015-01-15 14:07:59

标签: c# asp.net custom-controls

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

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

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

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方法是否可以使用自定义控件?

非常感谢!

编辑:

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

  • 类库1,&#34; CustomControls&#34;,其中包含NumericTextBox.cs
  • 和我的网站。

这是我的网页提取代码:

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";

        ...
    }
}

1 个答案:

答案 0 :(得分:0)

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

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";
        }
    }
}

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

修改 FindControl应与您的自定义控件配合使用。