2011-11-16 154 views
3

我遇到了Ajax和C#asp.net的问题。我正在使用Microsoft Visual Studio 2010.Ajax和简单的按钮事件处理程序不工作

首先让我解释我的网页。

我有脚本管理器,直接在下面,我有一个更新面板。

这是我一直在摆弄的动态占位符。

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 creeated下一页

的问题是,我的按钮事件处理程序仅适用一次。我很确定它是因为Ajax调用了部分回发,并且它不会识别它来调用我的按钮事件处理程序。

我不确定,任何帮助appriciated。

+0

请多关注您的标签选择,特别是当您选择“asp”标签时弹出的大“不使用”文本。 –

+0

@Joel Coehoorn对不起。感谢您的编辑。我将来会更加小心。 – clamchoda

+0

只是为了确保 - 你怎么知道按钮的点击只发射一次?你有没有在那里放置一个断点? – sq33G

回答

1

Firebug可以调试ajax的奇迹。 “有多个控件具有相同的ID'5'。”

什么是简单的修复。将id++;移至Button1_Click事件处理程序的顶部。

如果你曾经假设ajax只是因为断点没有在事件处理程序中触发而中断你的事件处理程序,那么萤火虫可能也会拯救你!

事件处理程序绝对没有错,但其中的代码导致错误,并且ajax不允许它中断。

+0

如果它解决了您的问题,则应将其标记为答案。 –