Подтвердить что ты не робот

Page_Load дважды запускается на странице ASP.NET

Функция asp.net page_load загружается дважды, поэтому она влияет на производительность моей страницы. Кто-нибудь знает причину, по которой он дважды загружается.

Нет, я не вызываю функцию загрузки страницы в любом месте...

4b9b3361

Ответ 1

Просто столкнулся с этой проблемой и подумал, что я отправлю ответ, в котором суммировал бы то, что нашел, плюс моя фактическая проблема.

1. img tags with src="" or Image tags with ImageUrl="
2. Using AutoEventWireup="true" and adding a page handler
3. Having manually added the event handler (more common for C# than VB)
4. Handling both MyBase.Load and Me.Load

и, наконец, моя проблема....

Моя страница унаследована от класса, в который входит обработчик загрузки страницы, который унаследован от класса с обработчиком загрузки страницы.

Public Class C1
    Inherits System.Web.UI.Page
   Protected Overridable Sub PageLoad(ByVal sender As Object, 
                               ByVal e As System.EventArgs) Handles Me.Load
   End Sub
End Class

Public Class C2
    Inherits C1
    Protected Overrides Sub PageLoad(ByVal sender As Object, 
                      ByVal e As System.EventArgs) Handles Me.Load
        MyBase.PageLoad(sender, e)
    End Sub
End Class

Public Class MyPage 
    Inherits C2
    Protected Overrides Sub PageLoad(ByVal sender As Object, 
                      ByVal e As System.EventArgs) 
        MyBase.PageLoad(sender, e)
    End Sub
End Class

Я протестировал это, и если вы поместите дескрипторы метода в MyPage, он получит три раза...

Ответ 2

Вы не вызываете функцию загрузки страницы дважды, то есть как работает ASP.NET. Страница отправляет сама по себе, вызывая функцию page_load, когда запускаются какие-либо элементы управления сервером на странице (те, которые установлены для обратной передачи).

Что вам нужно сделать, это поместить некоторые проверки, чтобы различать начальную загрузку страницы и сообщение назад

if(!IsPostBack) 
{  
//Code when initial loading 
}
 else 
{ 
// code when post back 
}

Ответ 3

Пожалуйста, найдите решение здесь........

  • Убедитесь, что в событиях загрузки есть обработчики для базового класса и дочернего класса Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Ручки MyBase.Load, Me.Load **

  • Если это просто удалить Me.Load из события, теперь проверьте свою страницу. Надеюсь, это может быть полезно и решить вашу проблему.

Ответ 4

Как только я нашел следующую строку в проекте:

  <link rel="Shortcut Icon" href="#" type="image/x-icon" />

Кто-то просто делал это, как обычно, с помощью "href". Но браузер фактически пытается получить значок сайта при каждом обновлении, поэтому он отправляет запрос на адрес из параметра href, то есть на ту же страницу.

Итак, проверьте это.

Ответ 5

Я решил проблему, установив атрибут AutoEventWireUp в FALSE. Я получил эту проблему при переходе с .net 1.1 на .net 4.0. Как-то VS2012 reset этот атрибут TRUE, когда я скопирую файл из более старой версии.

Ответ 6

Для меня это был пустой тег.

      <img src="#" />

Ответ 7

Не забудьте проверить значение IsPostBack, как показано ниже:

    protected void Page_Load(object sender, EventArgs e)
    {
            if (!this.IsPostBack)

Вы можете поместить контрольные точки внутри этого блока IF, чтобы проверить, что вы дважды запускаете Page_Load. Если вы видите, как Page_Load запускается дважды, и каждый раз, когда он не является обратной передачей, проверьте метод OnInit() для этой страницы. Убедитесь, что вы не подключаете обработчик нагрузки, как показано ниже. Вы часто увидите этот код из кода, который был перенесен из более ранних версий Visual Studio.

        this.Load += new System.EventHandler(this.Page_Load);

Удалите это, если найдете его. Это предполагает, что в верхней части разметки страницы есть следующее.  AutoEventWireup = "истина"

Ответ 8

У меня была та же проблема и была решена.

Я проверил свои правила Global.ascx и My rewrite.

Когда страница запрашивалась, у URL-адреса не было "/" в конце URL-адреса, и перенаправление произошло с "x.com/x" на "x.com/x/" в соответствии с моей конфигурацией для стандартов SEO.

Итак, все работает хорошо, и ваши внутренние ссылки должны иметь "/" в конце URL-адресов, чтобы избежать нескольких нагрузок.

Ответ 9

Объект "Страница" вызывает метод OnLoad на объекте "Страница", а затем рекурсивно делает то же самое для каждого дочернего элемента управления, пока не будут загружены страница и все элементы управления. Событие загрузки отдельных элементов управления происходит после Загрузите событие страницы.

Использовать метод событий OnLoad для установки свойств в элементах управления и для установления соединений с базой данных.

Reffer MSDN: введите ссылку здесь

Ответ 11

У меня была такая же проблема. Это было из-за TreeNode с ImageUrl = "".

Ответ 12

Для меня я мог бы обойти это вызов несколько раз, используя вместо этого событие PreRender

protected override void OnPreRender(EventArgs e)

Это вызывается только один раз, даже если onload и init вызываются миллион раз.

Ответ 13

Я заменил Response.Redirect на Server.Transfer, потому что было предложено быть новым способом делать вещи. С тех пор страницы загружаются дважды, а кнопка "Назад" в Chrome возвращается на предыдущую страницу и сразу возвращается к текущей странице. Я заменил Server.Transfer на Response.Redirect, и все вернулось к норме. Я также положил этот ответ на страницу загружается дважды из-за js-кода.

Ответ 14

Для меня это было решено, удалив

Handles Me.Load 

и сменив метод, подобный

Protected Overrides OnLoad(...)

Ответ 15

Для меня эта проблема возникла внезапно после обновления Windows октября 2017 года. Я заметил, что для страниц, сделанных доступными анонимным пользователям через элемент Location в web.config, теперь необходимо также предоставить доступ к любым активам, на которые ссылается эта страница, например изображения, таблицы стилей и т.д. Нижеприведенный пример предоставляет анонимный доступ к страница входа и каталог "images" (aka folder):

<location path="login.aspx">
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>
<location path="images">
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>

Обновление: я обнаружил, что вторая причина вызывается Page_Load дважды. В старом, устаревшем коде некоторые файлы .aspx.designer.cs некоторых страниц содержали несоответствия, которые, по-видимому, до сих пор не вызвали проблем. Вместо попытки ремонта я создал новые страницы, которые устраняли событие двойной нагрузки.