tags:

views:

127

answers:

3

Among other, I have two pages in my Web Site project. Default.aspx and TeacherControlPanel.aspx.

User gives his credentials in Default.aspx, a cookie is created And then he is Server.Transfer()ed to TeacherControlPanel.aspx.

TeacherControlPanel.aspx has a logout-button and another button named 'Send Mail'.

If the user presses the logout-button, the cookie is deleted and he is redirected to Default.aspx.

If the user closes the browser without logging out, when he opens the Default.aspx page, he is automatically redirected to TeacherControlPanel.aspx coz the cookie is there.

Now, everything is working fine except I am pressing a 'Send Mail' button on TeacherControlPanel.aspx then Default.aspx is being loaded and then TeacherControlPanel.aspx is loaded but Button event handler is not being executed.

Why Default.aspx is loading again and what is happening to Button event?

<%@ 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"&gt;

<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;
        }
    }
}
A: 

What's your form/button event doing? Sounds like you have code executing on PostBack but without seeing the code it's hard to say.

Chuck
+3  A: 

Does this also happen when you use Response.Redirect instead of Server.Transfer? What URL are you seeing in the browser address bar after the Server.Transfer?

Henk
'http://localhost:1051/WEb/Default.aspx'
So when you submit the form it is submitted to the wrong page, your browser still thinks you are on default.aspx, since the transfer happened on the server, not on the client. Bet Response.Redirect solved your problem?
Henk
Then when to use Server.Transfer()? What is its utility?
Henk
lol. I'm sorry, i shouldn't laugh because your learning but it really is funny. localhost runs only on your machine. That's what the 'local' bit means. That means that the link that you gave us cannot be seen by anybody else in the world even though it will work just fine for you. Considering your learner status it is unlikely that you will have your own server to host the site so please just provide these helpful chaps with the source code. Thanks.
Robert Massaioli
I am sorry, but I did aask the guy for the url to see if he still had default.aspx, not because I wanted to click his page to see it :)
Henk
Yea, Server.Transfer/Execute can cause hideous problems if not implemented properly.
o.k.w
But this was working yesterday. The problem happened when I added a new page in the project.
TeacherControlPanel.aspx was added I guess? Server.Transfer just moves to another page on the server, but the brwoser is unaware of this and simply submits to Default.aspx, and I bet yesterday you had the eventhandler in Default.aspx :)
Henk
Yes, TeacherControlPanel.aspx was added. But default.aspx is totally unchanged. Button event handler was not in Default.aspx.
And I have a new problem. I have changed all Server.Transfer()s to Response.Redirect()s. But now I can't see any page. IE7 is blank.
And Default page is loading multiple times and not redirecting.
Youre doing a redirect to Default.aspx?
Henk
A: 

Does "Send Mail" work correctly if you login through default but don't close the browser? My assumption is Server.Transfer is the problem. Default is receiving the event and then transferring control to TeacherControlPanel but not passing the event.

So, like Henk said try Redirect.

Jeremy Bade
But this was working yesterday. The problem happened when I added a new page in the project.