2016-03-12 3 views
0

Я хочу передать имя пользователя из страницы входа на главную страницу с помощью сеанса, но im получает сообщение об ошибке «Ссылка на объект, не установленную на экземпляр объекта». Мой код для входа страницы,Как пройти сессию в 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;  
} 

ответ

0

Согласно жизненному циклу страницы в ASP.Net, 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; 
    } 
+0

Спасибо. Меня устраивает. – Jay

0

Событие мастер загрузки страницы будут выполнены до того события нажатия кнопки, так что вы не будете иметь значение сеанса на мастер загрузки страницы в этот сценарий.

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

Вы можете попробовать установить значение метки главной страницы из события нажатия кнопки, сами по себе -

this.Master.Label11.Text = txtLogin.Text.Trim(); 
Смежные вопросы