asp.net 母版页的Page_Load方法将触发两次

nbnkbykc  于 2023-08-08  发布在  .NET
关注(0)|答案(7)|浏览(150)

现在我正在做一个非常简单的ASP.NET项目,我遇到了一个我无法理解的问题:由于某种原因,我不知道,我的主页的Page_Load方法在我尝试激活某个部分时触发了两次。IsPostBack的值第一次为true,第二次为false。我已经搜索并找到了许多关于这个问题的讨论,但没有一个答案帮助我解决了这个问题。
我该怎么做才能解决这个问题,并防止该方法再次触发?
编辑:
嘿,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 />

8wigbo56

8wigbo561#

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(或任何地方)。这肯定会导致页面加载两次。

p1tboqfb

p1tboqfb2#

在我的例子中,我使用了:

Protected Sub Page_Load() Handles Me.Load

字符串
我没有将页面的AutoEventWireUp设置为任何值,所以它默认为true。为了解决这个问题,我显式地将页面的AutoEventWireUp属性设置为false。

ymzxtsji

ymzxtsji3#

如果你想要一个具体的答案,请发送你的方法。下面是你的页面是如何工作的,也许它会帮助你理解:当你加载一个页面时-首先你的实际页面在页面渲染完成后被调用(他的page_load)-你的母版页面被调用(他的page_load)。任何在runat=server中设置并调用SQL info/ button/checkboxes的对象-没有设置为-postback=false-将再次触发页面-并与他一起触发母版页的page_load。希望这能帮上一点忙。

vktxenjb

vktxenjb4#

我在VS2013.net4.5中遇到了这种情况。在页面的底部,我注意到:

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

字符串
它呈现以下内容:

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


从我所读到的,一个空的@src会导致这个。
我只是删除它,因为我加载jquery需要。

cunj1qz1

cunj1qz15#

我可以通过将母版页上的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

vq8itlhq

vq8itlhq6#

我有一个遗留项目,使用WebForms与MasterPages和这一个让我挠头,直到一个灯泡出现在我的头上,我意识到了原因,所以把这个答案在这里的任何人谁需要它!
我的MasterPage Load / init事件被多次调用,我不知道为什么,直到我将调用堆栈扩展到所有代码(不仅仅是我的代码),它指向通过pagetnotfound.aspx的请求
此网站上的Pagenotfound.aspx使用母版页。。
这可能是修复空的src属性修复这个问题的原因-如果浏览器将其视为404,您的404页面将被调用,您的母版页也将被调用。
希望这对你有帮助。

brtdzjyr

brtdzjyr7#

任何方式-你的问题是你有DATABIND,在那里事件被调用-它使用“绑定”,在他的回合-完成绑定后-重新加载页面(和它的母版页面-所以你得到那些page_load两次)。对你来说,最好的解决方案是把你所有的相关函数/声明放在:

if (!page.ispostback())

字符串
现在当你的主程序被加载时-它会跳过已经加载的代码的每一部分。如果你有进一步的问题请通知我。

相关问题