【问题标题】:Button click event not firing after postback回发后按钮单击事件未触发
【发布时间】:2013-04-12 15:31:41
【问题描述】:

我在我的网络表单上的按钮单击事件中定义了以下代码。代码在我第一次单击按钮时正确执行。额外的点击应该会为我的数据库添加更多的值,但在这种情况下,在第一次回发之后,点击事件不会触发。

当我离开页面并返回时,我可以在列表中再添加一个名称,但随后的点击仍然不起作用。我被这个难住了...没有在页面上抛出任何 Javascript 错误(这是我想到的第一件事)

if (!String.IsNullOrEmpty(tbSuggestedSupplier_Add.Text))
{
   SqlCommand cmd = new SqlCommand("pSuggestedSupplier_AddNew", dbConnection);
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.Clear();
   cmd.Parameters.Add("@NewSupplierRequestID", SqlDbType.Int);
   cmd.Parameters.Add("@SupplierName", SqlDbType.VarChar, (500));
   //cmd.Parameters.Add("@SupplierTypeID");

   cmd.Parameters["@NewSupplierRequestID"].Value = Session["NewSupplierRequestID"];
   cmd.Parameters["@SupplierName"].Value = tbSuggestedSupplier_Add.Text;
   functions.NewSupplierRequest.Open();

   try
   {
      cmd.ExecuteNonQuery();
      gvSuggestedSuppliers.DataBind();
      tbSuggestedSupplier_Add.Text = string.Empty;
   }

   catch (Exception err)
   {
      this.lblError.Text = err.Message;
   }

   finally
   {
      functions.NewSupplierRequest.Close();
   }
}

【问题讨论】:

  • 你有没有调试过你的程序是否进入了“protected void Your_Handler(object sender, EventArgs e)”部分?
  • 你能告诉我们按钮和周围的html元素吗?

标签: c# asp.net


【解决方案1】:

如果有问题的 Button 是动态创建的,请确保在每次回发时重新附加 Click 事件处理程序。听起来这可能是问题所在。

最好的方法是在页面的PreInit event 中创建 Button 控件,并在其中附加事件处理程序。这样它就是你的 ViewState 的一部分,页面生命周期中的后续事件会知道它。

Page_PreInit(Object sender, EventArgs e)
{
    Button yourBtn = new Button();
    // Set your other properties
    yourBtn.Click += yourEventHandlerName;
    // Add the control to the controls collection of whatever container it belongs in
    yourContainer.Controls.Add(yourBtn);
}

【讨论】:

    【解决方案2】:

    通过将 CausesValidation="False" 添加到此特定按钮来解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-21
      • 2013-01-17
      • 2012-03-14
      • 2011-12-02
      • 2013-10-14
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多