如何在asp.net中传递会话

时间:2016-03-12 08:12:07

标签: asp.net

我想使用会话将用户名从登录页面传递到母版页,但我得到“对象引用未设置为对象的实例”错误。我的登录页面代码是,

protected void btnLogin_Click(object sender, EventArgs e)
{
    string connectionString = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
    SqlConnection con = new SqlConnection(connectionString);
    con.Open();

    SqlCommand cmd = new SqlCommand("select * from Registration where UserName = @username and Password = @password", con);
    cmd.Parameters.AddWithValue("@username", txtLogin.Text);
    cmd.Parameters.AddWithValue("@password", txtPassword.Text);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);
    if (dt.Rows.Count > 0)
    {
        Session["name"] = txtLogin.Text.Trim();
        Response.Redirect("ImageSearch.aspx");          
    }
    else
    {
        ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Invalid Username and Password')</script>");
    }         
}

,对于母版页代码是

protected void Page_Load(object sender, EventArgs e)
{       
        Label1.Visible = true;
        string sessionUserName = (string)(Session["name"]);
        Label1.Text = sessionUserName;      
}

2 个答案:

答案 0 :(得分:0)

根据Asp.net中的页面生命周期,Page_Load始终在事件发生之前触发。 在您的情况下,首先触发登录页面的Page_Load,主页面的Page_load,然后单击事件。这就是您的母版页中Session [“Name”]为空的原因。

如果您想在单击后立即更新母版页中的“Label1.Text”,则需要手动更新母版页。

protected void btnLogin_Click(object sender, EventArgs e)
    {
        string connectionString = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
        SqlConnection con = new SqlConnection(connectionString);
        con.Open();

        SqlCommand cmd = new SqlCommand("select * from Registration where UserName = @username and Password = @password", con);
        cmd.Parameters.AddWithValue("@username", txtLogin.Text);
        cmd.Parameters.AddWithValue("@password", txtPassword.Text);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        if (dt.Rows.Count > 0)
        {


            Session["name"] = txtLogin.Text.Trim();
            (Master as SiteMaster).UpdatePage();
            Response.Redirect("ImageSearch.aspx");

        }
        else
        {
            ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Invalid Username and Password')</script>");
        }

    }

在您的母版页中,添加一个方法:

    public void UpdatePage()
    {
        Label1.Visible = true;
        string sessionUserName = (string)(Session["name"]);
        Label1.Text = sessionUserName;
    }

答案 1 :(得分:0)

主页面加载事件将在按钮单击事件之前执行,因此在此方案中您将不会在主页面加载时具有会话值。

https://msdn.microsoft.com/en-us/library/dct97kc3.aspx

您可以尝试从按钮点击事件本身 -

设置母版页标签值
this.Master.Label11.Text = txtLogin.Text.Trim();