2012-02-06 127 views
3

現在我正在處理一個非常簡單的ASP.NET項目,並且遇到了一個問題,我無法控制自己的頭部:由於某種原因,這是我不知道的,我的主人Page的Page_Load方法激發兩次當我嘗試激活某個部分。 第一次IsPostBack的值爲真,第二次爲假。我已經搜索了許多關於這個問題的討論,但沒有任何答案幫助我解決這個問題。Master Page的Page_Load方法會觸發兩次

我能做些什麼來解決這個問題,並防止該方法發射兩次?

編輯:

嘿,巴拉克的要求這裏是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代碼嗎? – 2012-02-06 13:01:49

+0

只有主頁面或當前頁面纔會觸發兩次OnLoad? – tanathos 2012-02-06 13:07:16

+0

每個負載上的URL是相同還是不同? – 2012-02-06 13:15:46

回答

0

如果你想有一個明確的回答,請發送您的方法。 但是這裏是你的頁面是如何工作的,也許它會幫助你理解:當你加載頁面時,首先你的實際頁面被調用(他的page_load) 頁面完成渲染後 - 你的主頁面被調用他的page_load)。 設置爲runat=server並調用SQL信息/按鈕/複選框(未設置爲 - postback=false)的任何對象將再次觸發頁面 - 並且與他一起瀏覽母版頁的page_load。希望這有助於一點。

+0

沙洛姆巴拉克和阿米特 – ParPar 2012-02-06 13:02:49

+0

沙洛姆沙洛姆.. – 2012-02-06 13:07:04

+0

感謝您的回覆。我編輯並添加了html代碼。是C#代碼還需要? – 2012-02-06 13:31:33

1

在某些瀏覽器中加載了兩次asp.net頁面時出現問題。我可能值得用多個瀏覽器重新測試(如果你還沒有這樣做)。

一個原因是在一個圖像標記的空src屬性即

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

post給出了更廣泛的討論 - 最初指向在td背景屬性。

在同一篇文章中還有一個有趣的可能性。的

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

override protected void OnLoad(EventArgs e) 
在同一頁

想必也使用Page_Load使用會引起同樣的問題。給出的解決方案是AutoEventWireup="false"

編輯

看你的代碼,這可能是問題

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

如果這個評估在任何時候

ImageUrl='' 

的,這可能會導致圖像的src=""問題,這反過來可能會導致雙重回發

EDIT 2

唯一的其他方式能想到的是,如果你的頁面綁定後調用Response.Redirect(或任何地方)。這會導致頁面加載兩次。

+0

問題是,當我將AutoEventWireup設置爲false時,Page_Load事件根本不會觸發。 – 2012-02-06 13:33:27

+0

它不會 - 這是在AutoEventWireup =「true」上使用OnInit或OnLoad樣式語法導致的問題。你正在使用Page_Load,所以你是正確的,這不可能是問題 – 2012-02-06 13:37:32

-2

任何如何 - 你的問題是你有DATABIND,哪裏的事件被稱爲 - 它使用「綁定」,這在其完成綁定後 - 重新加載頁面(並與它的母版頁 - 所以你獲得這些page_load兩次)。 你最好的解決辦法是把內所有irelevent功能/聲明:

if (!page.ispostback()) 

現在當你的主人將被載入 - 它會跳過一個已經加載代碼的每一部分。 如果您還有其他問題,請通知我。

+1

你確定嗎 - 我不認爲數據綁定會從字面上重新加載頁面 - 它只會填充模板控件。這是一個常見的錯誤綁定到數據兩次,即在page_load和服務器端事件,但即使不會回發兩次頁面 - 最常見的症狀是失去你認爲在那裏的網格的變化 - 這樣作爲種類。總是很高興當然被證明是錯誤的 - 如果是的話,你可以發佈鏈接嗎? – 2012-02-06 15:52:15

+0

我相信它(我曾經遇到類似previos項目中的問題) - 當數據綁定(這是一個服務器端事件)時,頁面再次被加載,您可以在多個組件中阻止它 - 但deafult正在呼叫回傳事件。感謝您的評論任何如何 – 2012-02-06 15:57:39

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,並在MasterPage CodeBehind中使用 Sub Page_Load(),而不是在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" %> 

代碼隱藏

​​

頁現在顯示您好

+0

你可以包括一些示例代碼的工作原理? – 2014-10-24 14:40:58

1

在我的情況,我用的是:

Protected Sub Page_Load() Handles Me.Load 

我沒有頁面的AutoEventWireUp設定任何目標,因此它是默認爲真的。要解決此問題,我顯式將該頁面的AutoEventWireUp屬性設置爲false。