自定义DropDownList上的OnChange属性未呈现

时间:2012-03-27 11:45:14

标签: asp.net attributes drop-down-menu custom-controls

我有一个自定义用户控件,它基本上是一个下拉列表,预先填充了数据库中的值。

<asp:DropDownList ID="selResponseTimes" runat="server" SkinID="filterSkin">                
</asp:DropDownList>

代码背后:

public partial class Response_Times_Drop_Down : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable objDataTable = DAL.ExecuteDataTable("sp_cl_Response_Times_Get", null);
            selResponseTimes.DataSource = objDataTable;
            selResponseTimes.DataTextField = "TM_Code";
            selResponseTimes.DataValueField = "TM_Code";
            selResponseTimes.DataBind();
        }
    }

    public string SelectedValue
    {
        get
        {
            return selResponseTimes.SelectedValue;
        }
        set
        {
            selResponseTimes.SelectedValue = value;
        }
    }

}

控件按如下方式添加到我的页面,并且工作正常:

<asp:ResponseTimesDropDown runat="server" ID="selResponse" />

我正在使用以下内容将客户端事件作为属性添加到Page_Load上的标准控件:

txtCallRelatedCall.Attributes.Add("onblur", "CheckRelatedCall()");

但是,当我尝试使用自定义控件执行此操作时,它们不会被添加。

selResponse.Attributes.Add("onchange", "CalculateResponseTime()");

但是,如果我调试代码,属性将被添加到集合中,看起来它们只是没有输出到页面。这是为什么?

2 个答案:

答案 0 :(得分:2)

在页面生命周期的哪个阶段添加属性?

尝试在Page_Init

上添加它们
Protected void Page_Init(object sender, EventArgs e)
{
    selResponse.Attributes.Add("onchange", "CalculateResponseTime()");
}

编辑(见评论):

Public void CalculateResponseEnabled()
{
        selResponseTimes.Attributes.Add("onchange", "CalculateResponseTime()");
}

然后在from中你可以通过执行来调用CalculateResponseEnabled。

selResponse.CalculateResponseEnabled();

答案 1 :(得分:0)

我有同样的问题。我将我的代码添加到我正在使用的特定控件的OnPreRender事件中,它开始工作。