2014-11-10 2 views
1

Я искал ответы в Интернете, но есть так много, что я пробовал, что не работал. У меня есть две кнопки на странице «как» и «не нравится».Панель обновления ASP.NET не обновляется до второго щелчка

Когда я нажимаю кнопку, обновленная панель не обновляется, но данные для этого пользователя вставляются в базу данных.

Когда я нажимаю кнопку, второй раз панель обновления обновляется и работает для последующих кликов. Я хочу, чтобы панель обновления для обновления на первом нажмите

<form id="Matches" runat="server" class="form-horizontal"> 

     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 

     <asp:UpdatePanel ID="VotePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false" > 
      <ContentTemplate> 

       <div class="row"> 
       <!-- left column --> 
        <div class="col-lg-12 col-sm-12 col-xs-12"> 
         <div class="text-center"> 
         ail" /> 
          <h1> 
           <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></h1> 
          <div class="btn-group"> 
           <asp:Button ID="Button1" runat="server" CssClass="btn btn-default" Text="Like" OnClick="Button1_Click" /><asp:Button ID="Button2" CssClass="btn btn-default" runat="server" Text="Dislike" OnClick="Button2_Click" /> 
          </div> 
         </div> 
        </div> 
       </div> 

      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="Button1" /> 

       <asp:AsyncPostBackTrigger ControlID="Button2" /> 
       </Triggers> 
     </asp:UpdatePanel> 

C# коды

protected void Button1_Click(object sender, EventArgs e) 
     { 
      uservote.spAddLike(user.getId(), usermatch.getId()); 
      VotePanel.Update(); 

     } 
     protected void Button2_Click(object sender, EventArgs e) 
     { 
      uservote.spAddDislike(user.getId(), usermatch.getId()); 
      VotePanel.Update(); 
     } 
+0

Что произойдет, если вы установите для параметра «ChildenAsTriggers» значение true? Также, что вы меняете и как вы сжимаете содержимое панели обновлений? Есть что-то в 'uservote.spAddLike'? –

+0

Должен ли диспетчер сценариев быть вне формы? –

+0

@JonP То же самое, когда я устанавливал 'ChildenAsTriggers' значение true. У меня есть еще одна хранимая процедура, которая получает другого пользователя. Это находится в верхней части 'Page_Load' – user3922757

ответ

1

От комментариев в addtion на ваш вопрос, вы вызываете функцию обновления до того вы обновили базу данных. Вам нужно лучше понять page life-cycle.

Вы получаете обновленную информацию о загрузке страницы, это происходит до щелчка. Попробуйте следующее

private void functionToUpdateFields(some arguements) 
{ 
     /*Call Database and populate form fields*/ 
} 


protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!isPostback) 
    { 
     functionToUpdateFields(some arguements); 
    } 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
     uservote.spAddLike(user.getId(), usermatch.getId()); 
     functionToUpdateFields(some arguements); 
     VotePanel.Update(); 
} 

protected void Button2_Click(object sender, EventArgs e) 
{ 
     uservote.spAddDislike(user.getId(), usermatch.getId()); 
     functionToUpdateFields(some arguements); 
     VotePanel.Update(); 
} 

Когда у вас есть все это настроить poins набора перерыва на каждом из обработчиков событий и обратите внимание на порядок, в котором они возникают при отладке. Это даст вам практическую демонстрацию жизненного цикла страницы.

+0

В ответ на предлагаемое редактирование, удалив '! IsPostback', вы сделаете два вызова базы данных вместо одного и дважды обновите поля. Это говорит о том, что что-то не так с вашим кодом. –

+0

Если я останусь в '! IsPostBack', значения null будут вставлены в базу данных, и страница не обновится. Я вставил '

><% = DateTime.Now.TimeOfDay%>

' поэтому я могу видеть, когда страница обновляется. Я понимаю, что происходит с вашим кодом. Для загрузки 'Page_Load' вам требуется только функция functionToUpdateFields (некоторые аргументы);' для обновления один раз и для кнопок для обновления страницы в оставшиеся моменты. – user3922757