如何在登录名控件中显示用户名 [英] how to display user name in login name control

查看:22
本文介绍了如何在登录名控件中显示用户名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个母版页,其中包含基于母版页出现在所有后续页面上的 loginview 内容.我有一个用户名控件也嵌套在 loginview 中,用于在用户登录时显示用户的名称.来自母版页的 loginview 的代码显示如下:

<asp:LoginView ID="MasterLoginView" runat="server"><登录模板>欢迎 <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server"/><asp:Label ID="userNameLabel" runat="server" Text="Label"></asp:Label></span>![ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="重定向" LogoutText="注销" LogoutPageUrl="~/Logout.aspx"/>]<%--欢迎光临:<span class="bold"><asp:LoginName ID="MasterLoginName" runat="server"/></span>!--%></LoggedInTemplate><匿名模板>欢迎来客[ <a href="~/Account/Login.aspx" ID="HeadLoginStatus" runat="server">登录</a>]</匿名模板></asp:LoginView><%--&nbsp;&nbsp;[&nbsp;<asp:LoginStatus ID="MasterLoginStatus" runat="server" LogoutAction="Redirect" LogoutPageUrl="~/Logout.aspx"/>&nbsp;]&nbsp;&nbsp;--%>

由于 VS2010 在帐户文件夹中使用默认登录页面启动,我认为没有必要创建单独的登录页面,所以我只使用了相同的登录页面.请在下面找到登录控件的代码:

 <asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false"><布局模板><span class="failureNotification"><asp:Literal ID="FailureText" runat="server"></asp:Literal></span><asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification"ValidationGroup="登录用户验证组"/><div class="accountInfo"><fieldset class="登录"><legend style="text-align:left; font-size:1.2em; color:White;">账户信息</legend><p style="text-align:left; font-size:1.2em; color:White;"><asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">用户 ID:</asp:Label><asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox><asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"" CssClass="failureNotification" ErrorMessage="需要用户 ID."工具提示="用户 ID 字段是必需的."ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator></p><p style="text-align:left; font-size:1.2em; color:White;"><asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="密码">密码:</asp:Label><asp:TextBox ID="密码" runat="server" CssClass="passwordEntry"TextMode="密码"></asp:TextBox><asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="密码"" CssClass="failureNotification" ErrorMessage="需要密码."工具提示="需要密码."ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator></p><p style="text-align:left; font-size:1.2em; color:White;"><asp:CheckBox ID="RememberMe" runat="server"/><asp:Label ID="RememberMeLabel" runat="server" AssociatedControlID="RememberMe" CssClass="inline">保持登录状态</asp:Label></p></fieldset><p class="submitButton"><asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In"ValidationGroup="LoginUserValidationGroup" onclick="LoginButton_Click"/></p>

</LayoutTemplate></asp:登录>

然后我编写了自己的身份验证代码,因为我有自己的数据库.下面显示了登录按钮点击事件中的代码.:

 公共部分类登录:System.Web.UI.Page{//创建字符串对象字符串 userIDStr, pwrdStr;protected void LoginButton_Click(object sender, EventArgs e){//将文本框项分配给字符串对象userIDStr = LoginUser.UserName.ToString();pwrdStr = LoginUser.Password.ToString();//SQL连接字符串字符串 strConn;strConn = WebConfigurationManager.ConnectionStrings["CMSSQL3ConnectionString"].ConnectionString;SqlConnection Conn = new SqlConnection(strConn);//SqlDataSource CSMDataSource = new SqlDataSource();//CSMDataSource.ConnectionString = ConfigurationManager.ConnectionStrings["CMSSQL3ConnectionString"].ToString();//SQL select语句进行比较字符串 sqlUserData;sqlUserData = "SELECT StaffID, StaffPassword, StaffFName, StaffLName, StaffType FROM Staffs";sqlUserData += " WHERE (StaffID ='" + userIDStr + "')";sqlUserData += " AND (StaffPassword ='" + pwrdStr + "')";SqlCommand com = new SqlCommand(sqlUserData, Conn);SqlDataReader rdr;字符串 usrdesc;字符串名称;字符串 fname;字符串员工姓名;尝试{//字符串当前数据;//CurrentData = (string)com.ExecuteScalar();Conn.Open();rdr = com.ExecuteReader();rdr.Read();usrdesc = (string)rdr["StaffType"];fname = (string)rdr["StaffFName"];lname = (string)rdr["StaffLName"];员工姓名 = lname.ToString() + " " + fname.ToString();LoginUser.UserName = 员工名.ToString();rdr.关闭();if (usrdesc.ToLower() == "管理员"){Response.Redirect("~/CaseAdmin.aspx", false);}否则 if (usrdesc.ToLower() == "manager"){Response.Redirect("~/CaseManager.aspx", false);}否则如果(usrdesc.ToLower() ==调查员"){Response.Redirect("~/Investigator.aspx", false);}别的{Response.Redirect("~/Default.aspx", false);}}捕获(异常前){string script = "<script>alert('" + ex.Message + "');</script>";}最后{Conn.Close();}}

我的身份验证工作正常,页面被重定向到指定的目的地.但是,登录视图不显示用户名.我实际上无法弄清楚如何将我从数据库中选择的用户名传递给要显示的登录名控件.

仔细观察,我还注意到成功登录后应该显示的注销文本没有显示.这让我想知道母版页上的登录模板控件是否甚至会触发,或者它仍然是不断显示的匿名模板控件.?

我如何让它按预期工作?请帮忙....

解决方案

我所知道的是登录控件绑定到从会员提供程序获取数据.但是由于您使用的是自己的登录系统.无法获取登录控件以显示数据.

如果您想允许登录控件自动显示数据,请使用会员类

http://msdn.microsoft.com/en-us/library/tw292whz.aspx

或者如果您想拥有自己的登录系统,则通过实现抽象类 MembershipProvider 创建自定义成员资格提供程序.这是一个很好的资源

http://www.asp.net/general/videos/how-do-i-create-a-custom-membership-provider

如果您不想使用会员提供程序,另一种方法是在控件上手动更新用户信息..

I have a master page that holds the loginview content that appears on all subsequent pages based on the master page. i have a username control also nested in the loginview to display the name of the user when they are logged in. the code for the loginview from the master page is displayed as follows:

<div class="loginView">
                <asp:LoginView ID="MasterLoginView" runat="server">
                    <LoggedInTemplate>
                        Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /> 
                            <asp:Label ID="userNameLabel" runat="server" Text="Label"></asp:Label></span>!
                    [ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="~/Logout.aspx"/> ]
                        <%--Welcome: 
                        <span class="bold"><asp:LoginName ID="MasterLoginName" runat="server" /> </span>!--%>                       
                    </LoggedInTemplate>
                    <AnonymousTemplate>
                        Welcome: Guest
                        [ <a href="~/Account/Login.aspx" ID="HeadLoginStatus" runat="server">Log In</a> ]
                    </AnonymousTemplate>

                </asp:LoginView>
                <%--&nbsp;&nbsp; [&nbsp;<asp:LoginStatus ID="MasterLoginStatus" runat="server" LogoutAction="Redirect" LogoutPageUrl="~/Logout.aspx" />&nbsp;]&nbsp;&nbsp;--%>

            </div>

Since VS2010 launches with a default login page in the accounts folder, i didnt think it necessary to create a separate log in page, so i just used the same log in page. please find the code for the login control below:

 <asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false">
    <LayoutTemplate>
        <span class="failureNotification">
            <asp:Literal ID="FailureText" runat="server"></asp:Literal>
        </span>
        <asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification" 
             ValidationGroup="LoginUserValidationGroup"/>
        <div class="accountInfo">
            <fieldset class="login">
                <legend style="text-align:left; font-size:1.2em; color:White;">Account Information</legend>
                <p style="text-align:left; font-size:1.2em; color:White;">
                    <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">User ID:</asp:Label>
                    <asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName" 
                         CssClass="failureNotification" ErrorMessage="User ID is required." ToolTip="User ID field is required." 
                         ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                </p>
                <p style="text-align:left; font-size:1.2em; color:White;">
                    <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
                    <asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" 
                        TextMode="Password"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" 
                         CssClass="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required." 
                         ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                </p>
                <p style="text-align:left; font-size:1.2em; color:White;">
                    <asp:CheckBox ID="RememberMe" runat="server"/>
                    <asp:Label ID="RememberMeLabel" runat="server" AssociatedControlID="RememberMe" CssClass="inline">Keep me logged in</asp:Label>
                </p>
            </fieldset>
            <p class="submitButton">
                <asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" 
                    ValidationGroup="LoginUserValidationGroup" onclick="LoginButton_Click"/>
            </p>
        </div>
    </LayoutTemplate>
</asp:Login>

I then wrote my own code for authentication since i had my own database. the following displays the code in the login buttons click event.:

 public partial class Login : System.Web.UI.Page
{
    //create string objects
    string userIDStr, pwrdStr;

    protected void LoginButton_Click(object sender, EventArgs e)
    {


        //assign textbox items to string objects
        userIDStr = LoginUser.UserName.ToString();
        pwrdStr = LoginUser.Password.ToString();

        //SQL connection string

        string strConn;
        strConn = WebConfigurationManager.ConnectionStrings["CMSSQL3ConnectionString"].ConnectionString;

        SqlConnection Conn = new SqlConnection(strConn);



        //SqlDataSource CSMDataSource = new SqlDataSource();
       // CSMDataSource.ConnectionString = ConfigurationManager.ConnectionStrings["CMSSQL3ConnectionString"].ToString();


        //SQL select statement for comparison

        string sqlUserData;
        sqlUserData = "SELECT StaffID, StaffPassword, StaffFName, StaffLName, StaffType FROM Staffs";
        sqlUserData += " WHERE (StaffID ='" + userIDStr + "')";
        sqlUserData += " AND (StaffPassword ='" + pwrdStr + "')";

        SqlCommand com = new SqlCommand(sqlUserData, Conn);
        SqlDataReader rdr;
        string usrdesc;
        string lname;
        string fname;
        string staffname;

        try
        {

            //string CurrentData;
            //CurrentData = (string)com.ExecuteScalar();
            Conn.Open();
            rdr = com.ExecuteReader();
            rdr.Read();
            usrdesc = (string)rdr["StaffType"];
            fname = (string)rdr["StaffFName"];
            lname = (string)rdr["StaffLName"];
            staffname = lname.ToString() + " " + fname.ToString();
            LoginUser.UserName = staffname.ToString();
            rdr.Close();

            if (usrdesc.ToLower() == "administrator")
            {

                Response.Redirect("~/CaseAdmin.aspx", false);

             }
             else if (usrdesc.ToLower() == "manager")
             {
                 Response.Redirect("~/CaseManager.aspx", false);
             }
             else if (usrdesc.ToLower() == "investigator")
             {
                 Response.Redirect("~/Investigator.aspx", false);
             }
             else
             {
                 Response.Redirect("~/Default.aspx", false);
             }               


        }
        catch(Exception ex)
        {
            string script = "<script>alert('" + ex.Message + "');</script>";
        }
        finally
        {
            Conn.Close();
        }


    }

My authentication works perfectly and the page gets redirected to the designated destination. However, the login view does not display the users name. i actually cant figure out how to pass the users name that i had picked from the database to the login name control to be displayed.

taking a close look i also noticed the logout text that should be displayed after successful log in does not show. that leaves me wondering if the loggedin template control on the masterpage even fires at all or its still the anonymous template control that keeps displaying.?

How do i get this to work as expected? Please help....

解决方案

What i know is that Login controls are bound to Fetch data from Membership provider. But since you are using your own Login System. It can't get login controls to show data.

If you want to allow Login Controls to show data automatically then Use Membership Classes

http://msdn.microsoft.com/en-us/library/tw292whz.aspx

or if you want to have your own Login system Then Create a Custom membership provider by Implementing Abstract Class MembershipProvider. heres a good resource on that

http://www.asp.net/general/videos/how-do-i-create-a-custom-membership-provider

Another way is to update user information Manually on the controls if you don't want to use membership provider..

这篇关于如何在登录名控件中显示用户名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆