【问题标题】:Page_Load firing twice regardless of what i do无论我做什么,Page_Load 都会触发两次
【发布时间】:2013-11-24 14:46:23
【问题描述】:

我正在开发一个简单的 asp.net 登录页面。昨天,代码运行良好。今天,它不是。

昨天和今天之间唯一的变化是我关闭了我的电脑,今天又重新启动了它。

问题是 Page_Load 触发了两次(我检查了所有答案/解决方案,但没有一个有效(图像与空 src,手动处理 page_load,将 autoEventWireUp 设置为 false...))这些似乎都没有诡计。

请有人帮我弄清楚为什么会这样吗?

这是页面的代码及其背后的代码:

<%@ Page Title="Login" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="True" CodeBehind="Login.aspx.cs" Inherits="MatchingWebsite.Login" MaintainScrollPositionOnPostback="true" %>

<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent">
    <section class="featured">
        <div class="content-wrapper">
            <hgroup class="title">
                <h1><%: Title %></h1>
            </hgroup>
        </div>
    </section>
</asp:Content>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <h2 align="center">Looking for someone to spend your time with? Want to have fun with someone you like?<br />You've come to the right place!!</h2><br /><br /><br />
    <img alt="Cupid" src="Images/images.jpg" align="left" />
    <img alt="Couple" align="right" src="Images/matchmaking.jpg" /><br /><br />
    Username:<br />
    <asp:TextBox ID="UserLogIn" runat="server" Width="174px"></asp:TextBox><br /><br />
    Password:<br />
    <asp:TextBox ID="UserPass" runat="server" Width="175px" TextMode="Password"></asp:TextBox><br />        
    <asp:Label ID="LoginError" runat="server" Text="Wrong Username/Password Combination. Try again." Visible="False"></asp:Label><br /><br />
    <asp:Button ID="LoginButton" runat="server" OnClick="Login_Click" Text="Login" Width="81px" />
    <asp:Button ID="NotRegistered" runat="server" Text="Not Registered?"             Width="150px" OnClick="Not_Registered" />
</asp:Content>

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="HeadContent">
    <style type="text/css">
        .auto-style1
        {
            width: 300px;
            height: 113px;
        }
    </style>
</asp:Content>

下面是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace MatchingWebsite
{
    public partial class Login : System.Web.UI.Page
    {
        Service1 proxy = new Service1();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["username"]!=null && !IsPostBack)
                Response.Redirect("~/EnterMyInfo.aspx");
        }
        protected void Login_Click(object sender, EventArgs e)
        {
            string user = UserLogIn.Text;
            string pass = UserPass.Text;
            if (user == "" || pass == "")
                System.Web.HttpContext.Current.Response.Write("<SCRIPT LANGUAGE=\"JavaScript\">alert(\"Username/Password cannot be blank.\")</SCRIPT>");
            else
            {
                if (proxy.login_service(user, pass))
                {
                    Response.Redirect("~/EnterMyInfo.aspx");
                }
                else
                    LoginError.Visible = true;
            }
        }

        protected void Not_Registered(object sender, EventArgs e)
        {
            Response.Redirect("~/SignUp.aspx");
        }
    }
}

【问题讨论】:

  • 让我发疯的是代码昨天还在工作,而今天它只是停止工作,尽管没有任何改变。 (除了昨天正常关机)。
  • 您是否尝试再次重新启动 Web 应用程序...?
  • 我尝试重新启动 Web 应用程序和整个 PC。都没有奏效。另外,我尝试调试以查看到底发生了什么...当我按下登录时,由于回发(这是可以理解的)而调用了第一个 page_load,但随后无缘无故地第二次调用它(第二次不是回发)
  • 但是你有没有得到任何错误?
  • 没有错误...它编译并运行良好...其他页面工作正常...只是登录不起作用。

标签: c# asp.net


【解决方案1】:

网页可能真的被加载了两次。检查您的 javascript(或任何 AJAX 组件?),或使用浏览器的调试控制台来监控正在发送的网络请求。尝试在 PreInit、PostInit(等)事件上添加空方法并设置断点,我敢打赌这些也会被命中两次。

【讨论】:

  • 但昨天不是!!这怎么可能发生?另外,我没有任何 ajax 组件,而且我的 aspx 没有 javascript 脚本。
  • 经过更多调试后,我发现 Page_Load 在后面代码中的 Response.Redirect 之后被调用(而不是作为回发)。知道为什么吗?
  • 原来页面被加载了两次,因为我的代码有问题(设置 Session 值的错误)......谢谢大家,如果我造成任何不便,我们深表歉意。
猜你喜欢
  • 2017-11-21
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
相关资源
最近更新 更多