2008-11-16 4 views
2

У меня есть код в панели обновления, и даже если на кнопку щелкнуть, я вставляю данные в db и просто вызываю Updatepanel.Update() вся страница перезагружается:Ajax callback UpdatePanel.Update() по-прежнему перезагружает всю страницу

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(); 
} 

Любые идеи, почему вся эта страница будет перезарядить, а не только в текстовое поле получать обновления?

ответ

2

Где кнопка на Gifts.ASPX? Если вы поместите кнопку внутри UpdatePanel или используйте триггеры, вам не нужно вызывать UpdatePanel3.Update(); от кода позади.

1

Кроме того, на вашей странице должен быть объект ScriptManager. У тебя есть один?

3

Где находится кнопка в приведенном выше примере? Внутри или снаружи UpdatePanel. Если он находится вне вас, вам нужно будет добавить его в коллекцию триггеров UpdatePanel.

Также вам нужно вызвать UpdatePanel.Update(), если вы изменяете содержимое UpdatePanel, отличное от того, которое вызвало обратную передачу (Partial).

В качестве побочного примечания (и личного крестового похода) рекомендуется использовать инструкцию по использованию вашего соединения с БД.

С ниже разметкой, произойдет следующее:

  • btnInnerPart находится внутри панели обновления, поэтому он будет автоматически вызывать частичный постбэк
  • btnInnerFull вызовет полный постбэк, как это имеет PostBackTrigger в коллекция триггер
  • btnOuterPart вызовет частичный постбэк, как это имеет AsyncPostBackTrigger в коллекции спускового
  • btnOuterFull вызовет полный постбэк как он находится вне 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

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

0

не в состоянии обновить ярлык на панели обновления. Ниже приведен код:

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(); 
    }   
} 
Смежные вопросы