根据用户登录填充文本框

时间:2015-01-07 19:22:58

标签: c# asp.net .net

我是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>

这是我编写的用于填充TextBox的##代码&#34; first_name&#34;:

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();
    }

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您要检索Only FirstName,则无需使用*

试试这个

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