2009-08-17 105 views
0

其中,我在我的網站項目中有兩個頁面。 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

回答

3

當您使用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

0

什麼是您的表單/按鈕事件?聽起來你有在PostBack上執行代碼,但沒有看到代碼很難說。

0

如果您通過默認登錄但不關閉瀏覽器,「發送郵件」是否正常工作?我的假設是Server.Transfer是問題。默認是接收事件,然後將控制權傳遞給TeacherControlPanel,但不傳遞事件。

所以,像Henk說的那樣嘗試重定向。

+0

但是這是昨天工作。當我在項目中添加新頁面時發生問題。 – 2009-08-17 13:48:28