Подкласс DropdownList и получить значение открытого атрибута
У меня есть собственный элемент управления DropDownList:
<cc1:CountriesControl ID="DdlCountry" TabIndex="69" runat="server" DefaultCountry="USA" OnSelectedIndexChanged="DdlCountryIndexChanged"
CssClass="DefaultDropdown" AutoPostBack="true" />
DropDownList имеет пользовательское свойство с именем DefaultCountry. Как видите, по умолчанию установлено значение "США". Однако в моем подклассе DefaultCountry всегда имеет значение null.
Как мне получить его, чтобы установить DefaultCountry на то, что находится в разметке ASP.NET?
[DefaultProperty("Text"), ToolboxData("<{0}:CountriesControl runat=server></{0}:CountriesControl>")]
public class CountriesControl : DropDownList
{
[Bindable(true), Category("Appearance"), DefaultValue("")]
private String defaultCountry;
[
Category("Behavior"),
DefaultValue(""),
Description("Sets the default country"),
NotifyParentProperty(true)
]
public String DefaultCountry
{
get
{
return defaultCountry;
}
set
{
defaultCountry = value;
}
}
public CountriesControl()
{
this.DataSource = CountriesDataSource();
this.DataTextField = "CountryName";
this.DataValueField = "Country";
this.SelectedIndex = 0;
this.DataBind();
// DefaultCountry is always null?
this.Items.Insert(0, new ListItem(this.DefaultCountry, "--"));
}
// more code here
}
2 ответа
Решением было не связывать данные в конструкторе, а вызывать их из кода на моей странице. Похоже, что значение атрибутов (например, @DefaultCountry) не устанавливается до тех пор, пока метод RenderControl не будет вызван для элемента управления.
Вам нужно использовать Selected property
Значение true для элемента, который вы хотите установить по умолчанию. посмотрите здесь примеры Dropdownlist
// this is the normal syntax. to get the default value for dropdownlist
<asp:DropDownList ID="DropDownList1" runat="server" width="145px">
<asp:ListItem Text="SomeText" Value="SomeValue" Selected="true"></asp:ListItem>
</asp:DropDownList>
но в твоем случае. Вы можете попробовать вот так, я не уверен, но предположение.
this.Selected=true