【问题标题】:Page_Load method running twicePage_Load 方法运行两次
【发布时间】:2014-05-13 02:50:47
【问题描述】:

我使用内置的 asp.net Web 应用程序 Web 表单模板创建了一个 VS 2013 项目。通过在页面的 Page_Load 方法中放置断点,我可以看到该方法在按 F5 和页面出现之间执行了两次。为什么?我可以/我应该停止这种行为吗?

抱歉没有提供足够的细节。该代码完全是由 VS Exp 2013 for Web 生成的原始、未改动的模板代码。

ASPX 文件是

<%@ Page Title="About" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="mycompanyname.B1WebApp.About" %>

~/Site.Master 有一个空的 Page_Load 方法(不确定这是否相关)

后面的代码是

public partial class About : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Boolean Nothing;
    }
}

【问题讨论】:

  • Hmm - Page_load 每个页面生命周期只应调用一次,除非您自己显式调用它。但是,如果它是用户控件或类似控件,您可能会在母版页/父页上多次使用它?
  • 解决此问题的唯一可能方法是删除 Page_load 方法并重新键入页面加载方法或删除页面并重新创建它。

标签: c# asp.net


【解决方案1】:

您可以通过!IsPostBack避免页面加载功能在每个回发上工作

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Your code here
        }
    }

带有此母版页的用户控件也可能导致页面加载执行两次...

【讨论】:

  • 谢谢。非常有帮助。如果一个由 VS 创建的完全普通的模板项目在 Page_Load 方法中进行此检查,那肯定会有所帮助,因为这必须让每个尝试在页面加载时运行一些代码的人都对它感到陌生。或者我应该将只在页面加载时运行一次的代码放在其他地方?
  • 必须首先执行的代码可以放在pageload中。如果再次执行pageload..即,当单击按钮或任何回发时,!ispostback会阻止页面加载中的代码行再次执行,问候..
【解决方案2】:

这是 asp.net Web 表单的一部分,当在页面上使用服务器控件时,页面会回发给自身。一直都是这样。

您需要检查页面加载:

if(!IsPostBack) 
{  
//Code for first time load 
}
 else 
{ 
// code whenever you have a postback
}

【讨论】:

  • 谢谢。当您知道如何操作时非常容易。我没有。谢谢你的帮助。你会在上面的 else 语句中放入什么样的代码?它可以执行超过我观察到的两次吗?
猜你喜欢
  • 1970-01-01
  • 2018-04-06
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多