Subclass DropdownList并获取public属性的值

时间:2012-01-28 19:18:25

标签: asp.net drop-down-menu subclass asp.net-webcontrol

我有一个自定义的DropDownList控件:

<cc1:CountriesControl ID="DdlCountry" TabIndex="69" runat="server" DefaultCountry="USA" OnSelectedIndexChanged="DdlCountryIndexChanged"
                                CssClass="DefaultDropdown" AutoPostBack="true" />

DropDownList有一个名为DefaultCountry的自定义属性。如您所见,默认值设置为“USA”。但是在我的子类中,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 个答案:

答案 0 :(得分:0)

您需要对要将其设置为默认值的项目使用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

答案 1 :(得分:0)

解决方案是不绑定构造函数中的数据,而是从我页面后面的代码中调用它。在控件上调用RenderControl方法之前,似乎不会设置属性的值(例如@DefaultCountry)。