2008-11-16 142 views
2

我有更新面板中的代碼,即使在按鈕上單擊我插入數據到數據庫,只需調用Updatepanel.Update()整個頁面被重新加載:Ajax回調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的內容而不是導致(部分)回發的內容,則只需調用UpdatePanel.Update()。作爲旁註(和個人討伐),建議在你的數據庫連接中使用using語句。

下面的標識,將發生以下情況:

  • btnInnerPart是更新面板內,所以它會自動地使部分回發
  • btnInnerFull將導致完全回發,因爲它具有在PostBackTrigger觸發集合
  • btnOuterPart會造成局部回傳,因爲它有觸發集合
  • btnOuterFull在AsyncPostBackTrigger將導致完全回發,因爲它是在UpdatePanel外

標記:

<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(); 
    }   
} 
相關問題