Функция asp.net page_load загружается дважды, поэтому она влияет на производительность моей страницы. Кто-нибудь знает причину, по которой он дважды загружается.
Нет, я не вызываю функцию загрузки страницы в любом месте...
Функция asp.net page_load загружается дважды, поэтому она влияет на производительность моей страницы. Кто-нибудь знает причину, по которой он дважды загружается.
Нет, я не вызываю функцию загрузки страницы в любом месте...
Просто столкнулся с этой проблемой и подумал, что я отправлю ответ, в котором суммировал бы то, что нашел, плюс моя фактическая проблема.
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, он получит три раза...
Вы не вызываете функцию загрузки страницы дважды, то есть как работает ASP.NET. Страница отправляет сама по себе, вызывая функцию page_load, когда запускаются какие-либо элементы управления сервером на странице (те, которые установлены для обратной передачи).
Что вам нужно сделать, это поместить некоторые проверки, чтобы различать начальную загрузку страницы и сообщение назад
if(!IsPostBack)
{
//Code when initial loading
}
else
{
// code when post back
}
Пожалуйста, найдите решение здесь........
Убедитесь, что в событиях загрузки есть обработчики для базового класса и дочернего класса
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Ручки MyBase.Load, Me.Load **
Если это просто удалить Me.Load из события, теперь проверьте свою страницу. Надеюсь, это может быть полезно и решить вашу проблему.
Как только я нашел следующую строку в проекте:
<link rel="Shortcut Icon" href="#" type="image/x-icon" />
Кто-то просто делал это, как обычно, с помощью "href". Но браузер фактически пытается получить значок сайта при каждом обновлении, поэтому он отправляет запрос на адрес из параметра href, то есть на ту же страницу.
Итак, проверьте это.
Я решил проблему, установив атрибут AutoEventWireUp в FALSE. Я получил эту проблему при переходе с .net 1.1 на .net 4.0. Как-то VS2012 reset этот атрибут TRUE, когда я скопирую файл из более старой версии.
Для меня это был пустой тег.
<img src="#" />
Не забудьте проверить значение 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 = "истина"
У меня была та же проблема и была решена.
Я проверил свои правила Global.ascx и My rewrite.
Когда страница запрашивалась, у URL-адреса не было "/" в конце URL-адреса, и перенаправление произошло с "x.com/x" на "x.com/x/" в соответствии с моей конфигурацией для стандартов SEO.
Итак, все работает хорошо, и ваши внутренние ссылки должны иметь "/" в конце URL-адресов, чтобы избежать нескольких нагрузок.
Объект "Страница" вызывает метод OnLoad на объекте "Страница", а затем рекурсивно делает то же самое для каждого дочернего элемента управления, пока не будут загружены страница и все элементы управления. Событие загрузки отдельных элементов управления происходит после Загрузите событие страницы.
Использовать метод событий OnLoad для установки свойств в элементах управления и для установления соединений с базой данных.
Reffer MSDN: введите ссылку здесь
Пожалуйста, попробуйте внести изменения, упомянутые в этой ссылке. http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/ccc75925-3460-497c-8471-fcebecd8d061
BTW Я googled Page_Load Being called twice
У меня была такая же проблема. Это было из-за TreeNode с ImageUrl = "".
Для меня я мог бы обойти это вызов несколько раз, используя вместо этого событие PreRender
protected override void OnPreRender(EventArgs e)
Это вызывается только один раз, даже если onload и init вызываются миллион раз.
Я заменил Response.Redirect
на Server.Transfer
, потому что было предложено быть новым способом делать вещи. С тех пор страницы загружаются дважды, а кнопка "Назад" в Chrome возвращается на предыдущую страницу и сразу возвращается к текущей странице. Я заменил Server.Transfer
на Response.Redirect
, и все вернулось к норме.
Я также положил этот ответ на страницу загружается дважды из-за js-кода.
Для меня это было решено, удалив
Handles Me.Load
и сменив метод, подобный
Protected Overrides OnLoad(...)
Для меня эта проблема возникла внезапно после обновления 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 некоторых страниц содержали несоответствия, которые, по-видимому, до сих пор не вызвали проблем. Вместо попытки ремонта я создал новые страницы, которые устраняли событие двойной нагрузки.