子类 ASP.NET 中的下拉列表
本文关键字:下拉列表 NET ASP 子类 | 更新日期: 2023-09-27 17:47:22
我想在 ASP.NET 中对内置的DropDownList进行子类化,以便我可以为其添加功能并在我的页面中使用它。我尝试使用UserControl执行此操作,但发现它不会公开内部DropDownList(逻辑上,我猜)。我已经用谷歌搜索了答案,但找不到任何东西。
我已经编写了实际的类,并且可以从 DropDownList 进行子类化,但我无法在我的 ASP.NET 页面中注册该文件并在源视图中使用它。也许我的班级中缺少一些属性?
有什么想法吗?
您想在自定义控件中扩展 DropDownList...不在用户控件中。
创建一个名为 MyLibrary 的新类库项目。
添加一个名为 MyDropDownList 的类.cs
namespace My.Namespace.Controls
{
[ToolboxData("<{0}:MyDropDownList runat='"server'"></{0}:MyDropDownList>")]
public class MyDropDownList: DropDownList
{
// your custom code goes here
// e.g.
protected override void RenderContents(HtmlTextWriter writer)
{
//Your own render code
}
}
}
编译库后,可以在 Web 应用程序中添加对它的引用。
以及您的 web.config 中的标签前缀
<add tagPrefix="my" namespace="My.Namespace.Controls" assembly="MyLibrary" />
这应该允许您将其添加到您的aspx/ascx中。
<my:MyDropDownList ID="myDDl" runat="server">
...
</my:MyDropDownList>
在评论中,您阐明了您的目标:"我唯一想做的是添加一个 InitialValue 属性,该属性定义 DDL 中始终存在的第一个值。
我认为您不需要创建特殊的用户控件或自定义控件来实现这一点。
我经常在整个 Web 应用中使用此代码来填充列表控件。传入一个布尔值,指示是否要在列表顶部添加其他列表项,以及该项的文本。
public static void BindListControl (ListControl ctl, SqlDataReader dr,
String textColumn, String valueColumn, bool addBlankRow, string blankRowText)
{
ctl.Items.Clear();
ctl.DataSource = dr;
ctl.DataTextField = textColumn;
ctl.DataValueField = valueColumn;
ctl.DataBind();
if (addBlankRow == true) ctl.Items.Insert(0, blankRowText);
}
这很有用,例如,如果您希望每个 DropDownList 的初始值为空白,或文本(如"选择城市")。