Master Page的Page_Load方法触发两次

时间:2012-02-06 12:55:10

标签: asp.net master-pages pageload

现在我正在开发一个非常简单的ASP.NET项目,我遇到了一个我无法理解的问题:由于某些我不了解的原因,我的Master Page的Page_Load方法触发两次我尝试激活某个部分。 IsPostBack的值第一次为真,第二次为假。我搜索过并发现了许多关于这个问题的讨论,但没有一个答案帮助我解决了这个问题。

我可以做些什么来解决这个问题,并阻止该方法发射两次?

编辑:

嘿,这里对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 />

6 个答案:

答案 0 :(得分: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=""图像问题,进而导致双重回发

编辑2

唯一可以想到的方法是在页面绑定(或任何地方)之后调用Response.Redirect。这将导致页面加载两次肯定。

答案 1 :(得分:1)

就我而言,我正在使用:

Protected Sub Page_Load() Handles Me.Load

我没有将页面AutoEventWireUp设置为任何内容,因此默认为true。要解决此问题,我明确将页面的AutoEventWireUp属性设置为false。

答案 2 :(得分:0)

如果您想要特定答案,请发送您的方法。 然而,这是你的页面如何工作,也许它会帮助你理解: 加载页面时 - 首先调用您的实际页面(他的page_load) 页面完成渲染后 - 正在调用您的母版页(他的page_load)。 在runat=server中设置并调用SQL信息/按钮/复选框的任何对象 - 未设置为 - postback=false - 将再次触发页面 - 并与他一起page_load母版页。 希望这有点帮助。

答案 3 :(得分: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。

答案 4 :(得分:0)

我能够通过在母版页上将autoEventWireUp属性设置为True并使用来解决此问题 MasterPage CodeBehind中的Sub Page_Load(),不是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

答案 5 :(得分:-2)

任何方法 - 你的问题是你有DATABIND的地方,在那里调用事件 - 它使用“bind”反过来 - 在完成绑定后 - 重新加载页面(和它一起使用主页 - 所以你得到那些page_load两次)。 最好的解决方案是将所有的irelevent函数/声明放在:

if (!page.ispostback())

现在当你的主人被加载时 - 它将跳过已经加载的代码的每个部分。 如果你还有其他问题,请注意我。