这个问题与我的页面在回发时加载两次有关。我不符合 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的值加倍,这显然是不正确的。this.Load += new System.EventHandler(this.Page_Load);
作为修复,我在 InitializeComponents 方法中注释掉了 。站点和页面似乎可以工作,但我不确定这是否真的是解决潜在问题的方法。
我对您的建议持开放态度,我欢迎您对整个 InitilizeComponent 或 Autowireup 等内容进行一些解释。
谢谢你,里修
编辑: 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();
}