我遇到了Ajax和C#asp.net的问题。我正在使用Microsoft Visual Studio 2010。
首先让我解释一下我的网页。
我有脚本管理器,在其下面我有一个更新面板。
这是我一直在摆弄的动态占位符。
http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx
在我的更新面板中,我有一个动态控件&一个按钮。
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:ScriptManager ID="ScriptManager1" runat="server" >
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<DBWC:DynamicControlsPlaceholder ID="DynamicControlsPlaceholder1"
runat="server">
</DBWC:DynamicControlsPlaceholder>
<br />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</asp:Content>
现在在我的代码背后:
我只需在动态控件中添加5个文本框。页面加载;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ViewState["id"] = 0;
int id = (int)ViewState["id"];
for (int i = 0; i < 5; i++)
{
id++;
TextBox txt = new TextBox();
txt.ID = id.ToString();
DynamicControlsPlaceholder1.Controls.Add(txt);
txt.Text = i.ToString();
}
ViewState["id"] = id;
}
}
现在我的所有按钮都是将另一个TextBox添加到动态控制面板。
protected void Button1_Click(object sender, EventArgs e)
{
int id = (int)ViewState["id"];
TextBox txt = new TextBox();
txt.ID = id.ToString();
DynamicControlsPlaceholder1.Controls.Add(txt);
// DynamicControlsPlaceholder1.DataBind();
txt.Text = id.ToString();
id++;
ViewState["id"] = id;
}
* 注意我正在使用自定义动态控制面板,因此即使我们将它们保存在下一页,它们的ID也会保存到下一页!Page.IsPostBack
问题是我的按钮事件处理程序只能运行一次。我很确定它是因为Ajax调用了部分回发而且它没有认识到调用我的按钮事件处理程序。
我不确定,任何帮助都是适当的。
答案 0 :(得分:1)
Firebug为调试ajax创造了奇迹。 “有多个控件使用相同的ID'5'。”
简单的解决方法。已将id++;
移至Button1_Click
事件处理程序的顶部。
如果你曾经假设ajax正在打破你的事件处理程序只是因为断点没有在事件处理程序中触发,firebug也可能会为你节省!
事件处理程序完全没有问题,但是其中的代码导致错误,而ajax不允许它中断。