簡體   English   中英

動態添加的用戶控件中的文本框上的TextChanged事件未觸發

[英]TextChanged event on textbox in dynamically added user control not firing

我正在動態添加許多具有文本框的用戶控件。 當文本框中的文本更改時,我正在嘗試引發一個事件。

我的代碼是這樣的:

Default.aspx:

<asp:Panel ID="pnlControls" runat="server"/>

Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    MyControl control = (MyControl)LoadControl("Controls/MyControl.ascx");
    control.NameField = "Test Name";
    pnlControls.Controls.Add(control);
}

MyControl.ascx

<asp:TextBox ID="txtNameField" runat="server" OnTextChanged="txtNameField_TextChanged" AutoPostBack="true"/>

MyControl.ascx.cs

public string NameField;

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostback)
    {
        txtNameField.Text = NameField;
    }
}

protected void txtNameField_TextChanged(object sender, EventArgs e)
{
    NameField = txtNameField.Text;
}

這是代碼的簡化版本,其中包含使功能按要求工作所需的所有相關部分(據我所知)

但是,永遠不會執行txtNameField_TextChanged函數。 txtNameField文本更改時,如何使函數執行?

嘗試為UserControl分配一個ID

MyControl control = (MyControl)LoadControl("Controls/MyControl.ascx");
control.ID = "MyUserControl";
control.NameField = "Test Name";
pnlControls.Controls.Add(control);

控件在回發時必須具有相同的ID,以便能夠觸發事件或加載其視圖狀態。

txtNameField.Text ,您無需在事件txtNameField.Text分配給您的字段。 只需使用獲取/設置txtNameField.Text的屬性txtNameField.Text 這樣,您將始終擁有正確的值,並且該值也將自動保留在所有回發中。

所以代替這個:

public string NameField;

protected void txtNameField_TextChanged(object sender, EventArgs e)
{
    NameField = txtNameField.Text;
}

這個:

public string NameField 
{
    get
    {
        return txtNameField.Text;
    }
    // maybe you want to make it public
    private set 
    {
        txtNameField.Text = value;
    }
}

您需要將txtNameField添加到textChanged-Event中。

MyControl:

this.TextChanged += new EventHandler(txtNameField_TextChanged);

至少我認為這是您正在嘗試做的事情,因為在您的代碼中的任何地方都看不到該行。

我的猜測是您的點擊事件的綁定丟失了。 請嘗試在Page_Load之前動態添加控件,最好的方法是在Page_Init中初始化其他控件。 (屆時頁面中的所有其他控件實際上都已初始化)

請檢查ASP.NET頁面生命周期概述 ,其中明確指出應在預初始化階段添加動態控件。 這里是您正在使用的LoadControl方法的鏈接,該控件在代碼示例的init階段中也動態添加。

您能否嘗試並測試附帶的調試器。

我復制了您的代碼並執行了,對我來說,“ OnTextChanged”事件正在觸發。 甚至我已經將文本框放置在我以編程方式加載的用戶控件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM