Метод Page_Load главной страницы запускается дважды - PullRequest
3 голосов
/ 06 февраля 2012

Сейчас я работаю над довольно простым проектом ASP.NET, и у меня возникла проблема, я не могу разобраться: по какой-то причине, которая мне неизвестна, метод Page_Load моей Мастер-страницы запускается дважды, когда я пытаюсь активировать определенную часть. В первый раз значение IsPostBack равно true, во второй раз - false. Я искал и нашел много обсуждений по этой проблеме, но ни один из ответов не помог мне решить эту проблему.

Что я могу сделать, чтобы решить эту проблему и предотвратить повторный запуск метода?

Edit:

Привет, к запросу Барака вот Catalog.aspx:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Catalog.aspx.cs" Inherits="Catalog" Title="Untitled Page" Debug="true" %>

:: קטלוג מוצרים מיון המוצרים על פי: חברה, מחיר, דור

<asp:DataList ID="DataListPro" runat="server"
    RepeatColumns="3" OnItemCommand="DataListPro_ItemCommand">
    <ItemTemplate>
       <div Class="Catalog"> &nbsp;<asp:HyperLink ID="HyperLinkName" runat="server" NavigateUrl='<%# String.Format("ProDetails.aspx?id={0}",Eval("idProduct")) %>'
               Text='<%# Bind("NameProduct") %>' CssClass="CatalogLink" Font-Names="00264d" Font-Overline="False" Font-Underline="False" Font-Bold="True"></asp:HyperLink>
           <asp:Label ID="LblIdProduct" runat="server" Text='<%# Bind("idProduct") %>' Font-Bold="True" Visible="False"></asp:Label><br />
        <center><asp:Image ID="Image1" runat="server" ImageUrl='<%# Bind("ProductPic") %>' BorderWidth="0px" Height="100px" Width="100px" style="margin: 10px" /><br />
            <strong>
        רק ב</strong><asp:Label ID="LabelPrice" runat="server" Text='<%# Bind("price") %>' Font-Bold="True" ForeColor="#0099FF"></asp:Label><strong>
        ש"ח!</strong> &nbsp;<asp:LinkButton ID="LinkButtonAddToSal" runat="server" Font-Bold="True" CommandName="AddProduct">הוסף מוצר</asp:LinkButton></center>
        </div>
    </ItemTemplate>
    <ItemStyle BackColor="White" BorderColor="White" />
</asp:DataList>&nbsp;
<div class="pages">
  <center>
    &nbsp;<asp:LinkButton ID="LinkButtonPrevPage" runat="server" CommandName="PrevPage" OnClick="LinkButtonPrevPage_Click">לעמוד הקודם</asp:LinkButton>
      &nbsp;
    אתה נמצא בעמוד:
    <asp:Label
    ID="LabelPageDetails" runat="server"></asp:Label>
      &nbsp;
      <asp:LinkButton ID="LinkButtonNextPage"
        runat="server" CommandName="NextPage" OnClick="LinkButtonNextPage_Click">לעמוד הבא</asp:LinkButton>&nbsp;
  </center>
  <br />

Ответы [ 6 ]

1 голос
/ 12 марта 2015

В моем случае я использовал:

Protected Sub Page_Load() Handles Me.Load

У меня не было AutoEventWireUp страницы, установленной на что-либо, поэтому по умолчанию было установлено значение true. Чтобы решить эту проблему, я явно установил для свойства AutoEventWireUp страницы значение false.

1 голос
/ 06 февраля 2012

Существует проблема с загрузкой страниц asp.net дважды в определенных браузерах. Возможно, стоит повторить тестирование с несколькими браузерами (если вы этого еще не сделали).

Одной из причин является пустой атрибут src в теге изображения, т.е.

<img src="" alt="" />

Эта запись дает более расширенное обсуждение - первоначально указывая на атрибут фона в td.

В том же посте есть другая интересная возможность. Использование

<%@ Page Language="C#" ... AutoEventWireup="true" ... %>

с

override protected void OnLoad(EventArgs e) 

на той же странице и, вероятно, также использование Page_Load может вызвать ту же проблему. Решение дано AutoEventWireup="false"

EDIT

Глядя на ваш код, это может быть проблемой

ImageUrl='<%# Bind("ProductPic") %>'

Если это в какой-то момент оценивается как

ImageUrl=''

Это может вызвать проблему src="" с изображениями, что, в свою очередь, может привести к двойной обратной передаче

РЕДАКТИРОВАТЬ 2

Можно придумать только другой способ, если вы звоните Response.Redirect после привязки страницы (или где-либо еще). Это может привести к двойной загрузке страницы.

0 голосов
/ 24 октября 2014

Мне удалось это исправить, установив для свойства autoEventWireUp значение True на главной странице и используя Sub Page_Load () в MasterPage CodeBehind, а не Sub Page_Load () обрабатывает Me.Load.

Когда у меня было это

<%@ Master Language="VB"
    CodeFile="MasterPage.master.vb"
    Inherits="MasterPage" %>

И мой код имел

Sub Page_Load() handles me.load       
    Response.Write("Hello")
End Sub

Страница отображала HelloHello (код запускался дважды)

Новый код

<%@ Master Language="VB"
    CodeFile="MasterPage.master.vb"
    AutoEventWireup="true"
    Inherits="MasterPage" %>

Код позади

Sub Page_Load()
    Response.Write("Hello")
End Sub

Страница теперь отображает Hello

0 голосов
/ 22 июля 2014

Это происходило со мной в VS 2013.net 4.5.Внизу страницы я заметил:

<script type="text/javascript" src='<%# ResolveUrl ("~/Scripts/jquery-1.10.2.min.js") %>'></script>

Что отображает следующее:

 <script type="text/javascript" src=''></script>

Из того, что я прочитал, пустой @src вызовет это.

Я просто удалил его, когда загружаю jquery по мере необходимости.

0 голосов
/ 06 февраля 2012

как угодно - ваша проблема в том, где у вас есть DATABIND, где вызывается событие - он использует «bind», который, в свою очередь, - после завершения привязки - перезагрузит страницу (и вместе с ней главную страницу - так вы получитете page_load дважды).лучшее решение для вас - поместить все ваши функции / объявления irelevent в:

if (!page.ispostback())

сейчас, когда ваш мастер будет загружен - он пропустит каждую часть кода, который уже был загружен.заметьте меня, если у вас есть дальнейшие проблемы.

0 голосов
/ 06 февраля 2012

пожалуйста, пришлите ваши методы, если вы хотите получить конкретный ответ. Однако вот как работает ваша страница, возможно, она поможет вам понять: когда вы загружаете страницу - сначала вызывается ваша фактическая страница (его page_load) после того, как страница завершила рендеринг - вызывается ваша главная страница (его page_load). любой объект, который устанавливается в runat=server и вызывает SQL-информацию / кнопку / флажки - которые не установлены в - postback=false - снова запустит страницу - и вместе с ним page_load главной страницы. надеюсь, это поможет немного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...