2012-02-06 17 views
3

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

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

Edit:

Эй, просить Barak здесь является 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 /> 

+0

Можете ли вы разместить свой page_load код, пожалуйста? –

+0

Только мастер-страница или текущая страница дважды запускают OnLoad? – tanathos

+0

Является ли URL одинаковым или различным для каждой загрузки? –

ответ

0

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

+0

Shalom Barak и Amit – ParPar

+0

shalom shalom .. –

+0

Спасибо за ваш ответ. Я отредактировал и добавил html-код. нужен код C#? –

1

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

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

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

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

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

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

с

override protected void OnLoad(EventArgs e) 

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

EDIT

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

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

Если это оценивает в любой момент до

ImageUrl='' 

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

EDIT 2

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

+0

Проблема заключается в том, что когда я устанавливаю AutoEventWireup в false, событие Page_Load не срабатывает вообще. –

+0

Это не будет - это использование AutoEventWireup = "true" с синтаксисом стиля OnInit или OnLoad, который вызывает проблему. Вы используете Page_Load, так что вы правы, и это не может быть проблемой. –

-2

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

if (!page.ispostback()) 

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

+1

Вы уверены в этом - я не думаю, что databind буквально перезагрузит страницу - она ​​просто заполнит шаблонный элемент управления. Общей ошибкой является привязка к данным дважды, то есть в page_load и в случае с сервером, но даже это не приведет к повторной передаче страницы дважды - наиболее распространенным симптомом этого было бы потерять изменения в сетке, которые, по вашему мнению, были там - такие как сорта. Всегда рад быть ошибочным, конечно, - можете ли вы опубликовать ссылки, если это так. –

+0

Я уверен в этом (я столкнулся с проблемой, подобной предыдущим проектам) - когда данные привязаны (это событие на стороне сервера), страница загружается снова, вы можете предотвратить ее в нескольких компонентах, но deafult вызывает событие postback. спасибо за комментарий любой, как –

0

Это происходило со мной в 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

Я смог исправить это, установив для свойства autoEventWireUp значение True на главной странице и используя 0: .

Когда я это

<%@ 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 

Страница теперь показывает Здравствуйте

+0

Можете ли вы включить пример кода, как это работает? –

1

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

Protected Sub Page_Load() Handles Me.Load 

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

Смежные вопросы