根据用户登录填充文本框

本文关键字:文本 填充 登录 用户 | 更新日期: 2023-09-27 18:36:43

我是 c# 的新手,我正在尝试在不使用 .NET 中提供的任何向导工具(例如登录向导)的情况下培养我的技能。 到目前为止,我已经成功地创建了一个非常基本的登录网站。

我正在尝试创建一个用户个人资料页面,该页面将显示登录用户的所有数据(名字、姓氏等)。

页面上的文本框应填充Page_Load但不是。

这是 ASPX 页面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserProfile.aspx.cs" Inherits="TimeHub2.UserProfile" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="UserProfile" runat="server">
    <div class="header">
        <h1>TimeHub</h1>
        <ul>
            <li><a href="">my cards</a></li>
            <li><a href="UserProfile.aspx">profile</a></li>
            <li><a href="">help</a></li>
            <li><asp:Label runat="server" ID="userloggedin"></asp:Label></li>
            <li><asp:button runat="server" id="buttonLogout" text="Log Out" onClick="logOutClick" /></li>
        </ul>
    </div>
    <div>
        <label for="username">username</label>
        <asp:TextBox runat="server" id="username"></asp:TextBox>
        <label for="first_name">first name</label>
        <asp:TextBox runat="server" ID="first_name"></asp:TextBox>
        <label for="middle_intial">middle initial</label>
        <asp:TextBox runat="server" ID="middle_intial"></asp:TextBox>
        <label for="last_name">last name</label>
        <asp:TextBox runat="server" ID="last_name"></asp:TextBox>
    </div>
    <div>
        <label for="star">star</label>
        <asp:TextBox runat="server" ID="star"></asp:TextBox>
        <label for="rank">rank</label>
        <asp:TextBox runat="server" ID="rank"></asp:TextBox>
    </div>
    <div>
        <label for="assignment">assignment</label>
        <asp:TextBox runat="server" ID="assignment"></asp:TextBox>
        <label for="regular_shift">regular shift</label>
        <asp:TextBox runat="server" ID="regular_shift"></asp:TextBox>
    </div>
    <div>
        <label for="contact_phone">contact phone</label>
        <asp:TextBox runat="server" ID="contact_phone"></asp:TextBox>
        <label for="phone_type">phone type</label>
        <asp:DropDownList ID="phone_type" runat="server">
            <asp:ListItem>home</asp:ListItem>
            <asp:ListItem>cell</asp:ListItem>
        </asp:DropDownList>
        <label for="email">sfpd email</label>
        <asp:TextBox runat="server" ID="email" TextMode="Email"></asp:TextBox>
    </div>
    <div>
        <asp:Button runat="server" ID="save" Text="update profile" />
    </div>
    </form>
</body>
</html>

以下是我编写的用于填充文本框"first_name"的 c# 代码:

protected void Page_Load(object sender, EventArgs e)
    {
        //show user logged in
        if (Session["New"] != null)
        {
            userloggedin.Text = Session["New"].ToString();
        }
        //else redirect to login
        else
            Response.Redirect("Login.aspx");
        SqlConnection conn = new SqlConnection(Connection-String);
        SqlDataReader profileReader = null;
        string userDataQuery = "SELECT * FROM dbo.users WHERE username ='" + userloggedin.Text + "'";
        conn.Open();
        SqlCommand cmd = new SqlCommand(userDataQuery, conn);
        profileReader = cmd.ExecuteReader();
        while(profileReader.Read())
        {
            first_name.Text = profileReader["first_name"].ToString();
        }
        conn.Close();
    }

感谢您的帮助

根据用户登录填充文本框

解决了我自己的问题。 问题出在我的数据库的列名中。 我的命名约定在列名称中使用了下划线,但是我省略了相关列的下划线。 它不是"first_name",而是"名字"。

如果您只检索名字,则无需使用*

像这样尝试

string userDataQuery = "SELECT first_name FROM dbo.users 
WHERE username ='" + userloggedin.Text + "'";
while(profileReader.Read())
{
 first_name.Text = profileReader["first_name"]==DBNull.Value ? "":
 profileReader["first_name"].ToString();
}

当心SQL注入 始终使用SqlParameter