现在我正在开发一个非常简单的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"> <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> <asp:LinkButton ID="LinkButtonAddToSal" runat="server" Font-Bold="True" CommandName="AddProduct">הוסף מוצר</asp:LinkButton></center>
</div>
</ItemTemplate>
<ItemStyle BackColor="White" BorderColor="White" />
</asp:DataList>
<div class="pages">
<center>
<asp:LinkButton ID="LinkButtonPrevPage" runat="server" CommandName="PrevPage" OnClick="LinkButtonPrevPage_Click">לעמוד הקודם</asp:LinkButton>
אתה נמצא בעמוד:
<asp:Label
ID="LabelPageDetails" runat="server"></asp:Label>
<asp:LinkButton ID="LinkButtonNextPage"
runat="server" CommandName="NextPage" OnClick="LinkButtonNextPage_Click">לעמוד הבא</asp:LinkButton>
</center>
<br />
答案 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())
现在当你的主人被加载时 - 它将跳过已经加载的代码的每个部分。 如果你还有其他问题,请注意我。