Подклассы DropDownList в ASP.NET
-
04-07-2019 - |
Вопрос
Я хочу создать подкласс встроенного DropDownList в ASP.NET, чтобы я мог добавить к нему функциональность и использовать его на своих страницах. Я попытался сделать это с 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.config
<add tagPrefix="my" namespace="My.Namespace.Controls" assembly="MyLibrary" />
Это должно позволить вам добавить это в ваши aspx / ascx's
<my:MyDropDownList ID="myDDl" runat="server">
...
</my:MyDropDownList>
Другие советы
В комментарии вы уточняете свою цель: " единственное, что я хочу с ним сделать, - это добавить свойство InitialValue, которое определяет первое значение, которое всегда присутствует в DDL. "
Я не думаю, что вам нужно создавать специальный пользовательский или пользовательский элемент управления для этого.
Я часто использую этот код в своих веб-приложениях для заполнения элементов управления списком. Вы передаете логическое значение, указывающее, должен ли дополнительный ListItem быть добавлен вверху списка, и текст для этого элемента.
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 имел в качестве начального значения пустое значение или текст, такой как "Выберите город". Р>