Dynamic TextBox TextChanged在UpdatePanel中未触发

问题描述 投票:0回答:1

我的动态文本框TextChanged事件在不使用UpdatePanel的情况下可以正常工作,但是当我使用UpdatePanel时,它将停止工作。仅当单击Button并单击LinkBut​​ton时,它才有效。

我如何将动态文本框的TextChanged事件设置为UpdatePanel的触发器。希望对您来说清楚。

这是我的aspx

    <form id="form1" runat="server" enctype="multipart/form-data">
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Name :"></asp:Label>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <br />
            <asp:Label ID="Label2" runat="server" Text="Age :"></asp:Label>
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <br />
            <asp:Label ID="Label3" runat="server" Text="Phones :"></asp:Label>
            <br />
            <asp:Panel ID="pnlTextBox" runat="server">
            </asp:Panel>
            <asp:LinkButton ID="btnAddTxt" runat="server" OnClick="btnAddTxt_Click">Add TextBox</asp:LinkButton>
            <br />
            <br />
            <asp:Button ID="Button1" runat="server" Text="save" OnClick="Button1_Click" />
        </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="Button1" />
        </Triggers>
    </asp:UpdatePanel>
</form>

这是后面的代码

    protected void Page_PreInit(object sender, EventArgs e)
    {
        //Recreate Controls
        RecreateControls("txtDynamic", "TextBox");
    }
    protected void btnAddTxt_Click(object sender, EventArgs e)
    {
        int cnt = FindOccurence("txtDynamic");
        CreateTextBox("txtDynamic-" + Convert.ToString(cnt + 1));
    }
    private int FindOccurence(string substr)
    {
        string reqstr = Request.Form.ToString();
        return ((reqstr.Length - reqstr.Replace(substr, "").Length) / substr.Length);
    }
    private void RecreateControls(string ctrlPrefix, string ctrlType)
    {
        string[] ctrls = Request.Form.ToString().Split('&');
        int cnt = FindOccurence(ctrlPrefix);
        if (cnt > 0)
        {
            for (int k = 1; k <= cnt; k++)
            {
                for (int i = 0; i < ctrls.Length; i++)
                {
                    if (ctrls[i].Contains(ctrlPrefix + "-" + k.ToString()) && !ctrls[i].Contains("EVENTTARGET"))
                    {
                        string ctrlID = ctrls[i].Split('=')[0];
                        if (ctrlType == "TextBox")
                        {
                            CreateTextBox(ctrlID);
                        }
                        break;
                    }
                }
            }
        }
    }
    private void CreateTextBox(string ID)
    {
        TextBox txt = new TextBox();
        txt.ID = ID;
        txt.AutoPostBack = true;
        txt.TextChanged += new EventHandler(OnTextChanged);
        pnlTextBox.Controls.Add(txt);
        Literal lt = new Literal();
        lt.Text = "<br /><br />";
        pnlTextBox.Controls.Add(lt);
    }
    protected void OnTextChanged(object sender, EventArgs e)
    {
        TextBox txt = (TextBox)sender;
        string ID = txt.ID;
        //Place the functionality here
        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('" + ID + " fired OnTextChanged event')", true);
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        TextBox txtDynamic1 = (TextBox)this.form1.FindControl("txtDynamic-1");
        TextBox txtDynamic2 = (TextBox)this.form1.FindControl("txtDynamic-2");
        Response.Write(txtDynamic1.Text + " & " + txtDynamic2.Text);
    }
c# asp.net webforms updatepanel scriptmanager
1个回答
0
投票

您可以引用此URL,并从后面的代码(而不是aspx)中添加回发触发器。 https://forums.asp.net/t/1124967.aspx?Adding+a+Trigger+to+an+UpdatePanel+in+code+behind

© www.soinside.com 2019 - 2024. All rights reserved.