动态自定义 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 方法是否可以与自定义控件一起工作?
非常感谢!
编辑:
我的解决方案中有两个项目:
- 一个 class 库一,"CustomControls",其中包含 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";
...
}
}
这很奇怪,在我的代码中它完美运行:
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
应该可以使用您的自定义控件。
我想创建一个自定义控件:一个数字文本框。 我遵循了本教程 (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 方法是否可以与自定义控件一起工作?
非常感谢!
编辑:
我的解决方案中有两个项目:
- 一个 class 库一,"CustomControls",其中包含 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";
...
}
}
这很奇怪,在我的代码中它完美运行:
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
应该可以使用您的自定义控件。