Page_Load执行两次

时间:2013-01-09 17:50:24

标签: asp.net

这个问题与我的页面在帖子后面加载两次有关。我不能与asp.net中的页面生命周期相提并论,因此我的帖子。

简短搜索显示,AutoEventWireup是一个玩家,目前我的Page指令中没有引用它。逐步执行代码,Page_Load执行两次,第一次来自OnInint / InitializeComponent,其中自动生成以下内容:this.Load += new System.EventHandler(this.Page_Load);。主要问题是:我有类级变量Int32 totalDuration = 0;,它通过将名为“Duration”的单元格的值相加而填充在gridView RowDataBound事件中。例如,网格视图包含两行,其中第一行中单元格包含值35(分钟),第二行包含25.目的是将每行的所有分钟相加。这是简化的方法:

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        DataRowView drv = (DataRowView)e.Row.DataItem;

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            totalDuration = totalDuration + Convert.ToInt32(drv["Duration"]);
        }

        lblMinutes.Text = totalDuration.ToString("#,##0");
    }

因为Page_Load执行两次,所以totalDuration的值加倍,这显然是不正确的。作为修复,我在InitializeComponents方法中注释掉了this.Load += new System.EventHandler(this.Page_Load);。网站和页面似乎有效,但我不确定这是否真的是解决潜在问题的方法。

我对您的建议持开放态度,我欢迎您对整个InitilalizeComponent或Autowireup内容等进行一些解释。

谢谢你, Risho

编辑:Page_Load看起来像这样:

private void Page_Load(object sender, System.EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            /code removed/

            bindGrid(site, metric, month, year);
        }
    }

private void bindGrid(string site, string metric, int month, int year)
    {
        /code removed/
        gv.DataSource = dvSearch;
        gv.DataBind();
    }

0 个答案:

没有答案