2010-02-08 14 views
8

Używam C# do mojego programowania.Problem - żadne ukryte pole w Panelu aktualizacji nie jest aktualizowane

Mam do czynienia z problemem, że moja ukryta wartość zmiennej nie jest aktualizowana, gdy jest w panelu aktualizacji. Proszę zobaczyć poniżej kod do aspx:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
     <asp:Timer ID="Timer1" runat="server" Interval="10000" OnTick="Timer1_Tick"> 
     </asp:Timer> 
     <input type="hidden" runat="server" id="hidCurrentDate" value="" /> 
     <input type="hidden" runat="server" id="hidTripIds" value="" /> 
     <input type="hidden" runat="server" id="hidTripDetails" value="" /> 

<asp:UpdateProgress ID="uprogTrips" runat="server"> 
      <ProgressTemplate> 
       <span style="display: block; text-align: center"> 
        <p style="font-family: Verdana; font-size: larger; font-weight: bold;"> 
         <img src="../../Images/ajax-loader.gif" alt="Processing..." /><br /> 
         <br /> 
         Processing...</p> 
       </span> 
      </ProgressTemplate> 
     </asp:UpdateProgress> 
     <asp:UpdatePanel ID="upTripsGrid" runat="server" UpdateMode="Always"> 
      <ContentTemplate> 
       <asp:GridView ID="gvAllTrips" runat="server" OnRowDataBound="gvAllTrips_RowDataBound" 
        OnPageIndexChanging="gvAllTrips_PageIndexChanging" AllowPaging="true" AutoGenerateColumns="false"> 
        <PagerSettings Mode="NumericFirstLast" PageButtonCount="35" Position="TopAndBottom" /> 
        <PagerStyle CssClass="GridPager" />      
       </asp:GridView> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> 
       <asp:AsyncPostBackTrigger ControlID="ddSortBy" EventName="SelectedIndexChanged" /> 
       <asp:AsyncPostBackTrigger ControlID="ddFilterBy" EventName="SelectedIndexChanged" /> 
       <asp:AsyncPostBackTrigger ControlID="cbPageOptions" EventName="CheckedChanged" /> 
      </Triggers> 
</asp:UpdatePanel> 

i poniżej jest kod gdzie staram się aktualizować jednego pola ukrytego z mojego kodu CS.

Interesujące, gdy próbuję debugować jego pokazano wszystkie wartości, jednak gdy widzę go na stronie źródła nie daje żadnej wartości.

Oto mój kod aspx.cs:

protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    DataTable dtTrips = null; 
    WEX.Prototype.Data.TripDA tripDA = new WEX.Prototype.Data.TripDA(); 
    string tID = hidTripIds.Value; 
    string[] tripIDs = new string[1000]; 
    tripIDs = tID.Split(','); 


    foreach (string tripID in tripIDs) 
    { 
     TripSummaryBO tripSummaryBO = tripDA.getTripSummary(Convert.ToInt32(tripID)); 
     if (tripSummaryBO.tripLastEditedOnDate > Convert.ToDateTime(hidCurrentDate.Value)) 
     { 

      WEX.Prototype.Service.WSProxies WSProxies = new WEX.Prototype.Service.WSProxies(); 
      dtTrips = WSProxies.Build(); 
      Session["AllTrips"] = dtTrips; 
      dtTrips = (DataTable)Session["AllTrips"]; 
      if (dtTrips != null) 
      { 
       if (cnt==0) 
       { 
        hidTripDetails.Value = ("Trip name-" + tripSummaryBO.tripName + " was modified by user " + tripSummaryBO.tripLastEditedBy); 
       } 
       else 
       { 
        hidTripDetails.Value = hidTripDetails.Value + " <br/> " + ("Trip name-" + tripSummaryBO.tripName + " was modified by user " + tripSummaryBO.tripLastEditedBy); 
       } 
       BuildGridViewControl(dtTrips); 
       cnt = cnt + 1; 
      } 
     } 
     else 
     { 
      //upTripsGrid.Triggers.Clear(); 
      PageInit(); 
     }    
    } 
} 

Proszę zaproponować

Dzięki.

Odpowiedz

18

Twoje ukryte pola wejściowe nie znajdują się w panelu sterowania aktualizacji. Każde asynchroniczne okrążenie na serwerze spowoduje, że tylko te kontrolki wewnątrz samego UpdatePanel zaktualizują się w interfejsie użytkownika, więc pomimo tego, że kod za nim działa i aktualizuje ukryte pola, z przodu pozostają takie same, ponieważ znajdują się poza panelem .

Spróbuj przesunąć ukrytych pól w tagu <ContentTemplate>:

<asp:UpdatePanel ID="upTripsGrid" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <input type="hidden" runat="server" id="hidCurrentDate" value="" /> 
     <input type="hidden" runat="server" id="hidTripIds" value="" /> 
     <input type="hidden" runat="server" id="hidTripDetails" value="" /> 
     .... 
    </ContentTemplate> 
</asp:UpdatePanel> 
+1

prawo na pieniądze – jinsungy

+0

dobrych rzeczy. zauważ, że jeśli chcesz dynamicznie dodawać hiddenField, potrzebujesz ContentTemplateContainer: updatePanel.ContentTemplateContainer.Controls.Add (hiddenFieldX); i znaleźć go później użyć: panel.ContentTemplateContainer.Controls.OfType () .First(); –

Powiązane problemy