2008-11-16 43 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(); 
    }   
}