asp.net幽灵页面加载

问题描述:

其中,我在我的网站项目中有两个页面。 Default.aspx和TeacherControlPanel.aspx。asp.net幽灵页面加载

用户在Default.aspx中提供了他的凭据,创建了一个cookie然后他将Server.Transfer()发送给TeacherControlPanel.aspx。

TeacherControlPanel.aspx有一个注销按钮和另一个名为'发送邮件'的按钮。

如果用户按下注销按钮,cookie将被删除,并被重定向到Default.aspx。

如果用户在没有注销的情况下关闭浏览器,当他打开Default.aspx页面时,他会自动重定向到TeacherControlPanel.aspx,因为cookie在那里。

现在,一切工作正常,除了我按下TeacherControlPanel.aspx一个“发送邮件”按钮,然后被加载Default.aspx的,然后TeacherControlPanel.aspx加载,但没有被执行按钮事件处理程序。

为什么Default.aspx再次被加载,Button事件发生了什么?

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 

    <table> 
     <tr> 
     <td><asp:HyperLink ID="homePageHyperlink" runat="server" NavigateUrl="~/Default.aspx">Home</asp:HyperLink></td>   
     <td rowspan="5">&nbsp;<asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> 
     </asp:contentplaceholder></td> 
     </tr> 
     <tr> 
     <td><asp:HyperLink ID="studentControlPanelHyperlink" runat="server">Student</asp:HyperLink></td>   
     </tr> 
     <tr> 
     <td></td>   
     </tr> 
     <tr> 
     <td></td> 
     </tr> 
     <tr> 
     <td></td> 
     </tr> 
    </table>  
    </form> 
</body> 
</html> 


using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 

public partial class MasterPage : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string st = ""; 
    } 
} 


<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Untitled Page" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
    <table style="width: 253px; height: 118px"> 
     <tr> 
      <td style="width: 54px"> 
      </td> 
      <td colspan="2"> 
      </td> 
     </tr> 
     <tr> 
      <td align="right" style="width: 54px"> 
       <asp:Label ID="Label1" runat="server" Text="Username :"></asp:Label></td> 
      <td colspan="2"> 
       <asp:TextBox ID="usernameTextBox" runat="server"></asp:TextBox></td> 
     </tr> 
     <tr> 
      <td style="width: 54px"> 
       <asp:Label ID="Label2" runat="server" Text="Passord :"></asp:Label></td> 
      <td colspan="2"> 
       <asp:TextBox ID="passwordTextBox" runat="server"></asp:TextBox></td> 
     </tr> 
     <tr> 
      <td style="width: 54px"> 
      </td> 
      <td colspan="2"> 
       <asp:Button ID="btnLogin" runat="server" OnClick="btnLogin_Click" Text="Login" /></td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       <asp:Label ID="labLoginMessage" runat="server" Font-Bold="True" Font-Names="Verdana" 
        Font-Size="Small" ForeColor="#C00000" Text="Label" Width="226px"></asp:Label></td> 
     </tr> 
    </table> 
</asp:Content> 

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 

using Ice_Web_Portal.BO; 
using Ice_Web_Portal.ASP.NET.Utils; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     AspNetUtil util = new AspNetUtil(this); 

     util.DisposeCookie("user"); 

     UserTypeEnum userType = EnumUtility.ConvertToEnum(util.GetCookieValue("user", "usertype")); 
     string username = util.GetCookieValue("user", "username"); 

     if (userType == UserTypeEnum.Student) 
     { 
      Server.Transfer("~/Student/StudentControlPanel.aspx?username=" + username); 
     } 
     else if (userType == UserTypeEnum.Teacher) 
     { 
      Server.Transfer("~/Teacher/TeacherControlPanel.aspx?username=" + username); 
     } 
    } 

    protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     string username = this.usernameTextBox.Text; 
     string password = this.passwordTextBox.Text; 

     bool success = Ice_Web_Portal.BO.User.LogIn(username, password); 

     if (success) 
     { 
      Ice_Web_Portal.BO.User user = Ice_Web_Portal.BO.User.GetUserByUserName(username); 

      Ice_Web_Portal.BO.UserTypeEnum loginUserType = user.UserTypeEnum; 

      if (loginUserType == UserTypeEnum.Student) 
      { 
       AspNetUtil util = new AspNetUtil(this); 
       util.SaveInCookie("user", "username", username, 3600); 
       util.SaveInCookie("user", "usertype", "Student", 3600); 

       Server.Transfer("~/Student/StudentControlPanel.aspx?username=" + username); 
      } 
      else if (loginUserType == UserTypeEnum.Teacher) 
      { 
       AspNetUtil util = new AspNetUtil(this); 
       util.SaveInCookie("user", "username", username, 3600); 
       util.SaveInCookie("user", "usertype", "Teacher", 3600); 

       Server.Transfer("~/Teacher/TeacherControlPanel.aspx?username=" + username);     
      } 
      else 
      { 
       labLoginMessage.Text = "Sorry! Type of user couldn't be determined!"; 
      } 
     } 
     else 
     { 
      labLoginMessage.Text = Ice_Web_Portal.BO.User.LoginMessage; 
     } 
    } 
} 

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="TeacherControlPanel.aspx.cs" Inherits="Teacher_TeacherControlPanel" Title="Untitled Page" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
    <table style="width: 346px"> 
     <tr> 
      <td> 
       <asp:Label ID="labErrorMessage" runat="server" Font-Bold="True" Font-Names="Verdana" 
        Font-Size="Small" ForeColor="#C00000" Text="Error Message"></asp:Label></td> 
      <td> 
       </td> 
      <td> 
       </td> 
      <td> 
       </td> 
     </tr> 
     <tr> 
      <td> 
       Teacher Control Panel</td> 
      <td> 
       Mails</td> 
      <td> 
       Notices</td> 
      <td> 
       Uploads</td> 
     </tr> 
     <tr> 
      <td rowspan="3"> 
       <table style="width: 134px"> 
        <tr> 
         <td> 
          Username:</td> 
         <td> 
          <asp:Label ID="labUsername" runat="server" Text="labUsername"></asp:Label></td> 
         <td> 
          Teacher Code: 
         </td> 
         <td style="width: 3px"> 
          <asp:Label ID="labTeacherCode" runat="server" Text="labTeacherCode"></asp:Label></td> 

        </tr> 
        <tr> 
         <td> 
          Name :</td> 
         <td> 
          <asp:Label ID="labName" runat="server" Text="labName"></asp:Label></td> 
         <td> 
          Department</td> 
         <td style="width: 3px"> 
          <asp:Label ID="labDepartment" runat="server" Text="labDepartment"></asp:Label></td> 
        </tr> 
        <tr> 
         <td> 
         </td> 
         <td> 
         </td> 
         <td> 
         </td> 
         <td style="width: 3px"> 
         </td> 
        </tr> 
        <tr> 
         <td> 
         </td> 
         <td> 
         </td> 
         <td> 
         </td> 
         <td style="width: 3px"> 
         </td> 
        </tr> 
       </table> 
      </td> 
      <td> 
       <asp:Button ID="btnSendMail" runat="server" Height="24px" Text="Send Mail" Width="130px" OnClick="btnSendMail_Click" PostBackUrl="~/Teacher/TeacherControlPanel.aspx" /></td> 
      <td> 
       <asp:Button ID="btnSubmitNewNotice" runat="server" Height="24px" Text="Submit New Notice" 
        Width="130px" /></td> 
      <td> 
       <asp:Button ID="btnViewUploads" runat="server" Height="24px" Text="ViewUploads" Width="130px" /></td> 
     </tr> 
     <tr> 
      <td> 
       <asp:Button ID="btnViewOldMails" runat="server" Text="View Old Mails" OnClick="btnViewOldMails_Click" /></td> 
      <td> 
       <asp:Button ID="btnViewOldNotices" runat="server" Height="24px" Text="View Old Notices" 
        Width="130px" /></td> 
      <td> 
       <asp:Button ID="btnViewDefaulters" runat="server" Height="24px" Text="View Defaulters" 
        Width="130px" /></td> 
     </tr> 
     <tr> 
      <td> 
       <asp:Button ID="btnReceivedMails" runat="server" Height="24px" Text="Received Mails" 
        Width="130px" /></td> 
      <td> 
      </td> 
      <td> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="4" rowspan="1"> 
       <asp:GridView ID="UploadsGridView1" runat="server"> 
       </asp:GridView> 
      </td> 
     </tr> 
    </table> 
</asp:Content> 

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 

using Ice_Web_Portal.ASP.NET.Utils; 
using Ice_Web_Portal.BO; 

public partial class Teacher_TeacherControlPanel : System.Web.UI.Page 
{ 
    string username = string.Empty; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      username = (string)Request.QueryString["username"]; 

      Teacher teacher = Teacher.GetTeacherByUsername(username); 

      if (teacher != null) 
      { 
       labUsername.Text = username; 
       labName.Text = teacher.TeacherName; 
       labTeacherCode.Text = teacher.TeacherCode; 

       Dept dept = teacher.Department; 

       if (dept != null) 
       { 
        labDepartment.Text = dept.DeptName; 
       } 
      } 
      else 
      { 
       labErrorMessage.Text = "No teacher found"; 
      } 
     } 
    } 

    protected void btnSendMail_Click(object sender, EventArgs e) 
    { 
     //try 
     { 
      Server.Transfer(@"~/Teacher/TeacherSendMail.aspx?username=" + username); 
      //Response.Redirect(@"~/Student/StudentSendMail.aspx?username=" + username); 
     } 
     //catch (Exception ex) 
     { 
      string m; 
     } 
    } 

    protected void btnViewOldMails_Click(object sender, EventArgs e) 
    { 
     //try 
     { 
      Server.Transfer(@"~/Teacher/TeacherOldMail.aspx?username=" + username); 
      //Response.Redirect(@"~/Student/StudentSendMail.aspx?username=" + username); 
     } 
     //catch (Exception ex) 
     { 
      string m; 
     } 
    } 
} 
+0

你能发布代码吗?这样调试会容易得多。 – 2009-08-17 13:15:26

+0

PLZ查看更新。 – 2009-08-17 13:18:31

当您使用Response.Redirect而不是Server.Transfer时,这是否也会发生?在Server.Transfer之后,您在浏览器地址栏中看到了哪些URL?

+0

'http:// localhost:1051/WEb/Default.aspx' – 2009-08-17 13:21:48

+0

所以当你提交表单时,它被提交到错误的页面,你的浏览器仍然认为你在default.aspx上,因为传输发生在服务器上,不在客户端上。 Bet Response.Redirect解决了您的问题? – Henk 2009-08-17 13:23:15

+0

那么何时使用Server.Transfer()?它的用途是什么? – 2009-08-17 13:26:14

什么是您的表单/按钮事件?听起来你有在PostBack上执行代码,但没有看到代码很难说。

如果您通过默认登录但不关闭浏览器,“发送邮件”是否正常工作?我的假设是Server.Transfer是问题。默认是接收事件,然后将控制权传递给TeacherControlPanel,但不传递事件。

所以,像Henk说的那样尝试重定向。

+0

但是这是昨天工作。当我在项目中添加新页面时发生问题。 – 2009-08-17 13:48:28