为什么Ajax控件UpdatePancel每次刷新都要重新加载页面?我的想发是第一次打开页面的时候加载Page_Load事件,之后UpdatePancel的刷新不加载Page_Load事件,我把代码贴出来,大家帮我看看:using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Data.SqlClient;namespace ss
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        public static DataTable dt = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Request.QueryString["SF"] != null)
                {
                    GetTable();
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }
            }
         }        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sortExpression = e.SortExpression.ToString();            // 假定为排序方向为“顺序”
            string sortDirection = "ASC";            // “ASC”与事件参数获取到的排序方向进行比较,进行GridView排序方向参数的修改
            if (sortExpression == this.GridView1.Attributes["SortExpression"])
            {
                //获得下一次的排序状态
                sortDirection = (this.GridView1.Attributes["SortDirection"].ToString() == sortDirection ? "DESC" : "ASC");
            }            // 重新设定GridView排序数据列及排序方向
            this.GridView1.Attributes["SortExpression"] = sortExpression;
            this.GridView1.Attributes["SortDirection"] = sortDirection;            this.BindGridView();
        }        private void BindGridView()
        {
            // 获取GridView排序数据列及排序方向
            string sortExpression = this.GridView1.Attributes["SortExpression"];
            string sortDirection = this.GridView1.Attributes["SortDirection"];            // 调用业务数据获取方法
            //GetTable2();            // 根据GridView排序数据列及排序方向设置显示的默认数据视图
            if ((!string.IsNullOrEmpty(sortExpression)) && (!string.IsNullOrEmpty(sortDirection)))
            {
                dt.DefaultView.Sort = string.Format("{0} {1}", sortExpression, sortDirection);
            }            // GridView绑定并显示数据
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }        private void GetTable()
        {
            string strCon = "server=10.64.16.19;database=lncmcc_mis;uid=sa;pwd=sa";
            SqlConnection con = new SqlConnection(strCon);
            SqlDataAdapter adapter = new SqlDataAdapter("select top 200 * from tbl_message_UserMobile order by ID", con);
            dt = new DataTable();
            adapter.Fill(dt);
            con.Close();
            con.Dispose();
        }        private void GetTable2()
        {
            string strCon = "server=10.64.16.19;database=lncmcc_mis;uid=sa;pwd=sa";
            SqlConnection con = new SqlConnection(strCon);
            SqlDataAdapter adapter = new SqlDataAdapter("select top 200 * from tbl_message_UserMobile where Mobile = '" + TextBox1.Text + "' order by ID", con);
            dt = new DataTable();
            adapter.Fill(dt);
            con.Close();
            con.Dispose();
        }        protected void Button1_Click(object sender, EventArgs e)
        {
            GetTable2();
            GridView1.DataSource = dt;
            GridView1.DataBind();
            
        }
     
    }
}
高手帮我看看  谢谢!!

解决方案 »

  1.   

    UpdatePanel刷新本来就不会加载整个页面,只是部分刷新。哦,你的意思是怎么样才能在UpdatePanel发生异步Postback的时候不加载后台的Page_Load事件?那么把Page_Load事件里面的代码放到这里面
    protected void Page_Load(object sender, EventArgs e) 
    {
        ScriptManager sm = ScriptManager.GetCurrent(this.Page);
        if(!sm.IsInAsyncPostBack)
        {
            //....
        }
    }
      

  2.   

    页面刷新都要执行Page_Load,
    在WebForm的Page_Load事件中,都需要判断当前form是否是IsPostBack,IsPostBack为true时就不执行绑定数据
    updatepanel本来就是重新加载本页面,只是让客户端感到只加载的一部分而已
      

  3.   

    1. 这是 设计使然!2. UpdatePanel 实际上还是提交整张页面(当然是所有标准html form 元素),只是这个提交时 xmlHttp 完成的,发生完整的 asp.net page/request 生命周期3. 呈现的时候当然仅仅返回指定 UpdatePanel 的数据(注意可能多个 UpdatePanel 同时更新)
      

  4.   

    页面一加载就会进入Page_Load事件啊
      

  5.   

    没说太明白 不好意思  就是在UpdatePancel刷新的时候不让它运行
    if (!IsPostBack) 

        GetTable(); 
        GridView1.DataSource = dt; 
        GridView1.DataBind(); 

                     

    红字的代码
      

  6.   

    就是第一次打开页面的时候运行
    if (!IsPostBack) 

                      

    里面的代码 之后的UpdatePance刷新都不运行
    if (!IsPostBack) 

                      

    里面的代码现在的情况是第一次打开的时候运行  当UpdatePance局部刷新的时候也运行了
    if (!IsPostBack) 

                      
    }
    里面的代码  请各位大侠指点下 谢谢!
      

  7.   

    功能是 在UpdatePancel里面放一个GridView,UpdatePancel放一个Button按钮,点击按钮触发UpdatePancel局部刷新,即根据条件查询内容显示在GridView里面,但是点击按钮的时候导致整页重新加载,等于是GridView先把刚进入页面时查询出来的所有数据显示了一遍然后又显示根据条件要显示的内容,这样在数据少的时候察觉不到,反正功能跟要实现的差不多,但是在数据多的时候浏览器就死掉了,经过测试发现UpdatePance里面的内容每次刷新都把页面重新又加载了一遍 现在就是想在UpdatePance局部刷新的时候不运行
    if (!IsPostBack) 

                      

    里面的代码 本人对Ajax不熟悉  望各位大侠赐教!
      

  8.   

    UpdatePanel是全部页面提交, 部分页面刷新如果lz想要你要求的效果, 用jquery.ajax吧....
      

  9.   

    我觉得楼主的问题是AJAX根本没运行,否则不会出现还执行if (!IsPostBack) 下的代码的!!
    AJAX最棒的就是局部刷新,看楼主所述全部刷新了,那还叫什么AJAX呢??
    楼主问题可能是在web.config文件,
    问一下:如果你是vs2005的话,你建立网站的时候点了"ASP.NET AJAX-Enabled Web Site"这个选项吗?
    如果没点,web.config你也没有作改变的话,你想有AJAX的局部刷新效果就见鬼了!!如果你点了"ASP.NET AJAX-Enabled Web Site"这个选项,
    页面依次放了ScriptManager;UpdatePanel还没有局部刷新效果,也是见鬼了!!
      

  10.   

    我在一楼不是都说了吗, 不仅要用IsPostback,还要配合IsInAsyncPostBack来使用。IsInAsyncPostBack就是专门用来判断这个postback是否是由UpdatePanel引起的,完全可以解决楼主的问题,怎么你都完全无视呢。
      

  11.   

    是不是把什么默认的东西该了哦,导致异步更新失效,好久没有用这个了也忘记的差不多啦
    建议有jqurey,这个也是微软以后在ajax上面推荐的
      

  12.   

    你可以试着 在UpdataPanel里面的
        <Triggers>
        <asp:AsyncPostBackTrigger  ControlID="你那个按钮的ID"/>或者<asp:PostBackTrigger ControlID=""/>
        </Triggers>
    这样就应该可以控制按钮的是异步回发 还是 整个回发 
    我记得好像Button等一些控件自带封装了页面刷新功能的所以你写个这个控制下它 我也不知道到底对不对! 你可以试一试 大家交流一下