gpt4 book ai didi

c# - 在 LoginView 中显示用户名

转载 作者:太空狗 更新时间:2023-10-30 01:57:52 25 4
gpt4 key购买 nike

在 Visual Studio 中创建 ASP.NET 项目时,默认网站模板会显示用户在登录 View 中登录时的用户名。我想用用户的名字替换它。我将其存储在数据库中,因此在 Site.master 页面中我尝试了以下操作(在页面加载中):

    MembershipUser user = Membership.GetUser();
string id = user.ProviderUserKey.ToString();
SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Connection"].ConnectionString);
try
{
using (connection)
{
using (SqlCommand con_get = new SqlCommand("SELECT firstname FROM x WHERE userId='" + id + "'", connection)) //Executes SQL command
{
try
{
connection.Open(); //Opens the database connection
using (SqlDataReader reader = con_get.ExecuteReader())
{
if (reader != null)
{
while (reader.Read())
{
Label label1 = (Label)sender;
label1.Text = reader["x"].ToString();
}
}
}
}
catch
{

}

finally
{
connection.Close(); //Closes the database connection
}
}
}
}
catch
{

}

这暂时不起作用。我也尝试不使用发件人,只是尝试使用 label1.Text = reader["x"].ToString();但这没有用。

有人对我如何使这项工作有任何建议吗?

此外,这是正确的方法吗?肯定有更有效的方法来加载名字,而不是在用户每次导航到不同页面时都重新加载它(因此减少了对数据库的查询次数)?

最佳答案

我认为您最终遇到的是标签位于母版页上的事实。

protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
var welcomeLabel = Page.Master.FindControl("lblWelcome") as Label;
SetName(welcomeLabel);
}
}

这是一个手写登录模式:

protected void SetName(Label welcomeLabel)
{
//this is the type of thing you'd probably wanna do in the Global.asax on session start
if (Session["userName"] == null || !Login()) return; //session variable is empty and the login attempt failed, give up
var usersName = Session["userName"].ToString();
welcomeLabel.Text = usersName;
}
protected bool Login()
{
const string query = "SELECT Name FROM Users WHERE Password = @Password AND UserName = @UserName";
using (var conn = new SqlConnection(connectionString))
{
using (var comm = new SqlCommand(query, conn))
{
comm.CommandType = CommandType.Text;
comm.Parameters.Add(new SqlParameter("@Password", password)); //or get this from a control or wherever
comm.Parameters.Add(new SqlParameter("@UserName", userName)); //or get this from a control or wherever
conn.Open();
var name = (string)comm.ExecuteScalar();
if (!string.IsNullOrEmpty(name))
{
Session["userName"] = name;
return true;
}
//"Login information is wrong or user doesn't exist.
return false;
}
}
}

所以我们在这里所做的就是在我们的数据库中搜索用户名和密码之间的匹配项。用户名应该是唯一的,所以有点像您的主键,AND 过滤器只是确保密码与用户名匹配。简单。

一般来说,我认为您应该在 session 中存储更多关于用户的信息,这样才值得您花时间。我通常会创建某种形式的用户对象,这样我就可以在需要时点击它,然后通过用户对象轻松访问它。我认为这就是 Windows 成员资格类试图提供的帮助,但我不喜欢使用它们,除非我进行 Windows 身份验证。但这只是偏好。

关于c# - 在 LoginView 中显示用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12267933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com