【发布时间】:2014-12-20 12:07:55
【问题描述】:
我正在使用包含 Button 1 的 asp.net UpdatePanel。单击 Button1 时,会在后面的代码中创建一个字符串,然后将其发送回 updatePanel。该字符串包含应触发回发以执行 Button2_Click 函数的 Button2。不幸的是,我还不能在按钮 2 上执行完整的回发。
如果我在我的 aspx 页面上的 UpdatePanel 中将 Button2 添加为 PostBackTrigger 控件,我会收到一个错误,即找不到控件 (Button2)。这是有道理的,因为 Button2 是通过在后面的代码中单击 Button1 来创建的,并且在页面加载时不可用。
我正在尝试在页面加载时 RegisterPostBackControl(Button2),但我再次收到一个错误,即 Button2 在当前上下文中不存在。
任何帮助将不胜感激。
ASPX 页面
<asp:ScriptManager ID="ScriptManager" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<fieldset>
<div runat="server" id="DIV1">Testing...<br /></div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" clientidmode="static"/>
<div runat="server" id="DIV2"></div>
<asp:Label ID="DIV2_LABEL" runat="server"></asp:Label>
</fieldset>
</ContentTemplate>
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager.GetCurrent(Page).RegisterPostBackControl(Button2);
}
protected void Button1_Click(object sender, EventArgs e)
{
string DIV1_Html;
DIV1_Html= DIV1.InnerHtml;
DIV2.InnerHtml = DIV1_Html;
DIV2.InnerHtml += "<input id='Button2' type='button' value='button' runat='server' OnClick='Button2_Click' />";
}
protected void Button2_Click(object sender, EventArgs e)
{
DIV2_LABEL.Text = "Testing button2";
}
编辑
根据以下建议,我添加了如下按钮:
代替:
DIV2.InnerHtml += "<input id='Button2' type='button' value='button' runat='server' OnClick='Button2_Click' />";
我已将代码修改如下:
Button Button2 = new Button();
Button2.Text = "Add";
Button2.Click += new EventHandler(Button2_Click);
PostBackTrigger pTrigger = new System.Web.UI.PostBackTrigger() { ControlID = Button2.ID };
UpdatePanel1.Triggers.Add(pTrigger);
DIV2.Controls.Add(Button2);
但是我仍然缺少一些东西,因为当我单击没有错误的新按钮时没有触发 Button2_Click 函数。 ?????
【问题讨论】:
标签: c# asp.net ajax updatepanel