Событие нажатия кнопки не найдено?

#c# #asp.net #ajax #updatepanel

#c# #asp.net #ajax #панель обновления

Вопрос:

В: Я сумасшедший? Я получил событие. Название скопировано / вставлено, так что я знаю, что это не опечатка. Чего мне здесь не хватает? (Не беспокойтесь о параметрах, пожалуйста, это для обучения, и мне сказали не использовать их в это время)

       <asp:UpdatePanel ID="UdpEPL" runat="server" UpdateMode="Conditional" Visible="False">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="BtnEpl" EventName="BtnEpl_Click" />
            </Triggers>
      <ContentTemplate> 

      <!--some label and textbox controls-->

      <br />
      <asp:Button ID="BtnEpl" runat="server" Text="Submit" AutoPostBack="True" 
                    onclick="BtnEpl_Click" />
      <br />

      <!--the second update panel-->

         <asp:UpdatePanel ID="UdpEplShow" runat="server" UpdateMode="Conditional" Visible="False">
                  <Triggers>
                           <asp:AsyncPostBackTrigger ControlID="BtnEpl" EventName="BtnEpl_Click" />
                  </Triggers>
         <ContentTemplate>      
      <!--more labels displaying the user input from the first update panel-->
  

The codebehind:

  protected void BtnEpl_Click(object sender, EventArgs e)
        {
             string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
            string EplQuery = "INSERT INTO EPL (Entity, Employees, CA, MI, NY, NJ, Primex, EplLim, EplSir, Premium, Wage, Sublim) VALUES ('"   TbEplEntity   "', '"   TbEplTotalEmpl   "', '"   TbEplCalEmpl   "', '"   TbEplMichEmpl   "', '"   TbEplNyEmpl   "', '"   TbEplNjEmpl   "', '"   TbEplPrimEx   "', '"   TbEplLim   "', '"   TbEplEplSir   "', '"   TbEplPrem   "', '"   TbEplWage   "', '"   TbEplInvestCost   "')";
            string EplIdQuery = "SELECT SCOPE_IDENTITY() AS LastInsertedInstanceId";

        using (SqlConnection EplConn = new SqlConnection(connectionString))
        {
            EplConn.Open();
            SqlCommand EplCmd = new SqlCommand(EplQuery, EplConn);
            SqlCommand EplIdCmd = new SqlCommand(EplIdQuery, EplConn);
            using (EplCmd)
            using (EplIdCmd)
            {
                EplCmd.ExecuteNonQuery();
                SqlDataReader EplDr = EplIdCmd.ExecuteReader();
                EplDr.Read();
                int lastInsertedInstanceId = Convert.ToInt32(EplDr[0]);


            }

            string x = Request.QueryString["InstanceId"];
            string EplShowQuery = "SELECT Entity, Employees, CA, MI, NY, NJ, Primex, EplLim, EplSir, Premium, Wage, Sublim FROM EPL WHERE InstanceId ="   x;
            using (SqlCommand EplShowCmd = new SqlCommand(EplShowQuery, EplConn))
            {
                SqlDataReader EplDr = EplShowCmd.ExecuteReader();
                EplDr.Read();
                LblEplShowEntity.Text = EplDr.GetString(0);
                LblEplShowTotalEmpl.Text = EplDr.GetInt32(1).ToString();
                LblEplShowCalEmpl.Text = EplDr.GetInt32(2).ToString();
                LblEplShowMichEmpl.Text = EplDr.GetInt32(3).ToString();
                LblEplShowNyEmpl.Text = EplDr.GetInt32(4).ToString();
                LblEplShowNjEmpl.Text = EplDr.GetInt32(5).ToString();
                LblEplShowPrimEx.Text = EplDr.GetInt32(6).ToString();
                LblEplShowLim.Text = EplDr.GetInt32(7).ToString();
                LblEplShowSir.Text = EplDr.GetInt32(8).ToString();
                LblEplShowPrem.Text = EplDr.GetInt32(9).ToString();
                LblEplShowWage.Text = EplDr.GetInt32(10).ToString();
                LblEplShowInvestCost.Text = EplDr.GetInt32(11).ToString();

            }
        }
            UdpEPL.Visible = false;
            UdpEplShow.Visible = true;


    }
}
  

Ответ №1:

В trigger вам нужно только указать название события.

Это должно быть

 <asp:AsyncPostBackTrigger ControlID="BtnEpl" EventName="Click" />
  

вместо

 <asp:AsyncPostBackTrigger ControlID="BtnEpl" EventName="BtnEpl_Click" />
  

Комментарии:

1. Значит, я не использую фактическое имя обработчика события из codebehind (BtnEpl_Click)? Я должен просто использовать ‘Click’?

2. Да, нам нужно использовать только название события, а не имя обработчика. просто попробуйте 🙂

3. @Brazos: Свойство называется eventName .

4. Что ж, страница загрузится, но теперь у меня не работает кнопка. Я не получаю никаких действий при нажатии. Почему это?

5. Почему вы установили это Visible =»False»? панель обновления должна быть видна для работы.

Ответ №2:

Вы закрываете первый ContentTemplate в какой-то момент? В случае, если вы делаете это после разметки кнопки, пожалуйста, включите ChildrenAsTriggers =»true».

Ответ №3:

Просто в интересах дать ответ на этот вопрос, я должен указать на свою ошибку. @Muhammad спросил меня, почему для панелей было установлено значение visible = false; это было из-за того, как я пытался подойти к структуре страницы. Я хотел использовать ajax для отображения форм ввода, а затем скрыть их при отправке в БД и отобразить данные в формате, доступном только для чтения, поэтому я подумал, что помещу обе формы в панели обновления и сделаю их невидимыми, пока они не будут вызваны выпадающим списком. К сожалению, я обнаружил, что триггеры не срабатывают на невидимых элементах управления. Не цитируйте меня, но, насколько я понимаю, это потому, что невидимые элементы управления на стороне сервера не отправляют разметку в браузер. Урок усвоен.