代码如下:

<form id="form1" runat="server">
<!-- ASP.NET AJAX服务器端控件ScriptManager -->
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1"  ChildrenAsTriggers="true" runat="server" ateMode="Conditional">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>//以上代码来自《ASP。NET AJAX 实用开发详解》,以下代码是我增加的<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<div>
 <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" /></div>
</form>
//cs代码
     protected void Page_Load(object sender, EventArgs e)
    {
//判断是否有页面回发
        if (!IsPostBack)
        {
            Label1.Text = "begining...";
        }
        else
        Label1.Text = "refreshed";
    }
   //书中的代码,点击按钮的在UpdatePanel1中
   protected void Button1_Click(object sender,EventArgs e)
   {
Response.Write("<script>alert('这个是一个对话框')</script>");
   }
   //我写的代码 点击按钮的 不 在UpdatePanel1中
    protected void Button2_Click(object sender, EventArgs e)
    {
        Response.Write("<script>alert('这个是一个对话框2')</script>");
    }
问题:
不管点击哪个按钮,都触发了页面回发。我的理解按钮1应该不会引起页面回发,按钮1会引起回发的。看不出2者有何区别请指点。

解决方案 »

  1.   

    ChildrenAsTriggers="true" 这句表明在updatepanel里面的控件会引起回发的 
    若只想button2触发恢复
    改成ChildrenAsTriggers=“false”,同时在updatepanel添加
    <Triggers><asp:AsyncPostBackTrigger ControlID="Button2" /></Triggers>
      

  2.   

    Button2可以不管他,如果有影响删除它也行;
    关键是:我调试时做不到:
    点击按钮Button1后 Label1.Text = "begining..." (即Label1没有变化,用它来判断页面是否重新回发了不知是否正确)。 
      

  3.   

    ChildrenAsTriggers=“false”也是点饥后重新回发整个页面的啊。
    我都不明白这个AjaxStart程序向我说明了什么了。
      

  4.   

    请不要使用response.write() 谢谢
      

  5.   

    你要搞清楚刷新和回发.
    PostBack
    Refresh
      

  6.   

    使用 ScriptManager.RegisterClientScriptBlock注册脚本
    如 ScriptManager.RegisterClientScriptBlock(this,typeof(Page),"hello", "<script>alert('这个是一个对话框') </script>",false);
      

  7.   

    感谢rqx110,使我明白 用  PostBack 来判断整个页面是否回发 不够正确的,
    用浏览器的前进和后退来判断差别比较好。