2008-11-16 5 views
2

J'ai le code dans un panneau de mise à jour et même si sur un bouton cliquez j'insère des données dans un DB et appelle simplement Updatepanel.Update() la page entière est rechargée:Ajax callback UpdatePanel.Update() toujours recharger la page entière

Gifts.ASPX

<table style="width:100%;"> 
      <tr> 
       <td> 
        <asp:Label ID="Label2" runat="server" Text="Gift"></asp:Label> 
       </td> 
       <td> 
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
        <asp:TextBox ID="txtNewGift" runat="server"></asp:TextBox> 
    </ContentTemplate> 
</asp:UpdatePanel> 
       </td> 
      </tr> 
      <tr> 

Gifts.aspx.CS

protected void cmdAddGift_Click(object sender, EventArgs e) 
{ 
    OleDbConnection objConn = new OleDbConnection(DataSource); 

    Random r = new Random(); 
    int giftID = r.Next(1200, 14000); 

    OleDbCommand objCommand = new OleDbCommand("Insert into Gifts (GiftID, Description) values (" + giftID + ",'" + txtNewGift.Text + "')", objConn); 
    ExecuteCommand(objCommand); 

    PopulateGifts(objConn); 

    txtNewGift.Text = ""; 
    UpdatePanel3.Update(); 
} 

Toutes les idées pourquoi cette page entière serait reload au lieu de simplement la mise à jour? obtenir textbox

Répondre

2

Où est le bouton sur Gifts.ASPX? Si vous placez le bouton dans le UpdatePanel ou utilisez des déclencheurs, vous n'avez pas besoin d'appeler UpdatePanel3.Update(); du code derrière.

1

Vous devez également avoir un objet ScriptManager sur votre page. Avez-vous une?

3

Où est le bouton dans l'exemple ci-dessus? À l'intérieur ou à l'extérieur du UpdatePanel. Si c'est à l'extérieur, vous devrez l'ajouter à la collection de triggers du UpdatePanel.

De même, vous n'avez qu'à appeler UpdatePanel.Update() si vous modifiez le contenu d'un UpdatePanel autre que celui ayant causé la publication (partielle). En guise de note de côté (et de croisade personnelle), il est recommandé de placer une instruction using autour de votre connexion DB.

Avec le balisage ci-dessous, ce qui se passera:

  • btnInnerPart est à l'intérieur du panneau de mise à jour, il provoquera automatiquement une publication partielle
  • btnInnerFull provoquera un postback complet car il a un PostBackTrigger dans la collection de déclenchement
  • btnOuterPart provoquera une publication partielle car il a un AsyncPostBackTrigger dans la collection de déclenchement
  • btnOuterFull provoquera une publication complète car elle est à l'extérieur du UpdatePanel

Markup:

<asp:UpdatePanel runat="server"> 
    <ContentTemplate> 
     <!-- Content --> 
     <asp:Button runat="server" ID="btnInnerPart" Text="Inner Part" /> 
     <asp:Button runat="server" ID="btnInnerFull" Text="Inner Full" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnOuterPart" /> 
     <asp:PostBackTrigger ControlID="btnInnerFull" /> 
    </Triggers> 
</asp:UpdatePanel> 
<asp:Button runat="server" ID="btnOuterFull" Text="Outer Full" /> 
<asp:Button runat="server" ID="btnOuterPart" Text="Outer Part" /> 
0

s'il vous plaît vérifier étiquette du panneau de mise à jour ... vous devez spécifier les commandes de déclenchement pour le panneau de mise à jour sur lequel le panneau de mise à jour se mettre à jour

0

Pas en mesure de mettre à jour l'étiquette dans le panneau de mise à jour. Voici le code:

public class OnJobCompleteEventArgs : EventArgs 
{ 
    public string JobName { get; set; } 
    public string Message { get; set; } 

    public OnJobCompleteEventArgs(string jobName) 
    { 
     this.JobName = jobName; 
     this.Message = string.Format("Job {0} completed at {1}", jobName, DateTime.Now); 
    } 
} 

public class Job 
{ 
    public delegate void JobCompleted(object sender, OnJobCompleteEventArgs e); 
    public event JobCompleted OnJobComplete; 

    public void StartJob() 
    { 
     //Get Job, Run Job, Job is complete 
     ThreadStart sleep = new ThreadStart(RunJob); 
     Thread t = new Thread(sleep); 
     t.Start();    
    } 

    public void RunJob() 
    { 
     Thread.Sleep(2000); 

     if (OnJobComplete != null) 
      OnJobComplete(this, new OnJobCompleteEventArgs("ExportBill")); 
    } 
} 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Job myJob = new Job(); 
     myJob.OnJobComplete += new Job.JobCompleted(myJob_OnJobComplete); 
     myJob.StartJob();   
    } 

    public void myJob_OnJobComplete(object sender, OnJobCompleteEventArgs e) 
    { 
     Label1.Text += e.JobName + ": " + e.Message; 
     UpdatePanel1.Update(); 
    }   
} 
Questions connexes