2016-05-25 32 views
4

我开发了一个ASP.NET Web应用程序。登录页面和注销功能正常工作。我添加了一个新的方法来显示登录用户的名称。添加此方法后,我无法登录到我的应用程序。我不认为我已经正确地添加了这个方法。 Login 你能帮忙吗?登录用户名不显示

的Login.aspx

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    try 
    { 
    DataTable dtUser = UserRegistration.GetUserByUserName(txtUserName.Text, txtPassword.Text); 
    if (dtUser.Rows.Count > 0) 
    { 
     lblSuccessMessage.Text = "Login Successful!"; 

     oLoginData = txtUserName.Text; 

     Session["intUserId"] = dtUser.Rows[0]["intUserId"].ToString(); 
     Session["DisplayName"] = dtUser.Rows[0]["DisplayName"].ToString(); 
     Response.Redirect("~/WebForms/Home/Home.aspx"); 

    } 
    else 
    { 
     lblErrorMessage.Text = "Incorrect User Name or Password"; 
     txtUserName.BackColor = System.Drawing.Color.LavenderBlush; 
     txtPassword.BackColor = System.Drawing.Color.LavenderBlush; 
     return; 
    } 
    } 
    catch 
    { 
    lblErrorMessage.Text = "Incorrect User Name or Password"; 
    txtUserName.BackColor = System.Drawing.Color.LavenderBlush; 
    txtPassword.BackColor = System.Drawing.Color.LavenderBlush; 
    return; 
    } 
} 
} 

Site.Masters.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    if ((Session["intUserId"] == null)) 
    { 
    FormsAuthentication.SignOut(); 
    Response.Redirect("~/Login.aspx"); 
    } 
    else 
    { 
    //lblLocation.Text = Session["LocationName"].ToString(); 
    lblUser.Text = "Logged User :" + Session["DisplayName"].ToString(); 
    } 
} 

GetUserByUserName

public static DataTable GetUserByUserName(string UserName, string Password) 
     { 
      DataTable dsResult = new DataTable(); 
      try 
      { 


       String strConnString = ConfigurationManager.ConnectionStrings["TCDMSConnection"].ConnectionString; 
       SqlConnection con = new SqlConnection(strConnString); 
       SqlCommand com = new SqlCommand(); 
       SqlDataAdapter da = new SqlDataAdapter(); 

       con.Open(); 
       com.Connection = con; 
       com.CommandType = CommandType.StoredProcedure; 
       com.CommandText = "spUserValidation"; 

       SqlParameter[] sqlParam = new SqlParameter[2]; 

       sqlParam[0] = new SqlParameter("@Username", UserName); 
       sqlParam[1] = new SqlParameter("@Password", Password); 

       if (sqlParam != null) 
       { 
        com.Parameters.AddRange(sqlParam); 
       } 

       da.SelectCommand = com; 
       da.Fill(dsResult); 

       con.Close(); 

       return dsResult; 

      } 
      catch (Exception ex) 
      { 
       throw (ex); 
      } 




     } 


    } 

Image

+0

当会话为空时,站点母版页加载时发生了什么?你得到显示名称?并且你写了无法登录,请解释,并且在调试时出现了什么错误。 – Ajay2707

+0

我不能登录我的应用程序,没有任何错误,登录页面显示登录成功消息,但不能登录 – Codeone

+0

我想使用户登录,显示当前用户名后 – Codeone

回答

0

最后我找到了解决办法, im不能正确添加SP为Disp layNameCol

AS 
BEGIN 

    SELECT 
     UserId, 
     UserName, 
     FullName, 
     UserCatagoryId, 
     DisplayName 

    FROM UserRegistrations 
    WHERE UserName = @Username AND Password = @Password 


END 
4

如果你的登录页面Login.aspx使用相同的母版页Site.Master那么你似乎有重定向循环。

当您访问该应用程序时,由于您尚未登录,您将被重定向到Login.aspx。当Login.aspx正在加载,这一部分:

if ((Session["intUserId"] == null)) 
{ 
    FormsAuthentication.SignOut(); 
    Response.Redirect("~/Login.aspx"); 
} 
母版页将签署并导致重定向回 Login.aspx,这将导致整个事情重复的

浏览器会注意到该请求被重定向很多倍,并会最终放弃,并显示某种页面无法显示错误。

要修复它,您需要避免重定向,如果当前正在运行的页面已经是Login.aspx。例如像这样(在Site.Master.cs):

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Request.CurrentExecutionFilePath.ToLower().EndsWith("login.aspx")) 
    { 
     if ((Session["intUserId"] == null)) 
     { 
      FormsAuthentication.SignOut(); 
      Response.Redirect("~/Login.aspx"); 
     } 
     else 
     { 
      lblUser.Text = "Logged User :" + Session["DisplayName"].ToString(); 
     } 
    } 
} 
+0

感谢帮助爵士而言,我尝试这一点,但无法正常工作(不正确的用户名和密码登录成功!)显示登录页面 – Codeone

+0

您是否获得登录成功消息?或不正确的用户...消息?或两者? – sam

+0

我同时收到两条消息 – Codeone

2

根据你的意见,你没有得到任何exception和代码工作正常。所以你可以尝试的东西很少。

  • 请勿使用Response.Redirect("yourpage")改为使用Response.Redirect("yourpage",false);
  • 使用FormsAuthentication.RedirectFromLoginPage方法重定向 登录页面而不是Response.Redirect()
  • 另外,请检查你的web.config文件,并确保您有启用 会话的timeout财产和cookiesless会议有效 值。

    <sessionState 
        mode="InProc" 
        cookieless="false" 
        timeout="100"/> 
    

Here为一种制品,说明第一个两分。

-1

希望您的登录代码工作正常,然后只需使用

Session["DisplayName"] = txtUserName.Text; 

,而不是

Session["DisplayName"] = dtUser.Rows[0]["DisplayName"].ToString(); 
+0

我用它,但无法正常工作 – Codeone

1

[assuming your GetUserByUserName method works fine]尝试Page_Load方法改变你

if (Session["intUserId"] != null) 
     { 
      if (string.IsNullOrEmpty(Session["DisplayName"].ToString())) 
      { 
       // Your Display name is having blank space , null value 
      } 
      else 
      { 
       //lblLocation.Text = Session["LocationName"].ToString(); 
       lblUser.Text = "Logged User :" + Session["DisplayName"].ToString(); 
      } 

     } 
     else 
     { 
      FormsAuthentication.SignOut(); 
      Response.Redirect("~/Login.aspx"); 
     } 
+0

林爵士试图做到这一点,但不能登录 – Codeone

+0

您无法登录,或者无法显示用户名? – KanisXXX

+0

爵士,我使其 – Codeone