C# 如何在登录名控件中显示用户名

C# 如何在登录名控件中显示用户名,c#,asp.net,web-applications,webforms,C#,Asp.net,Web Applications,Webforms,我有一个母版页,其中包含基于母版页显示在所有后续页面上的loginview内容。我在loginview中还嵌套了一个username控件,用于在用户登录时显示其名称。母版页中的登录视图代码显示如下: <div class="loginView"> <asp:LoginView ID="MasterLoginView" runat="server"> <LoggedInTemplate>

我有一个母版页,其中包含基于母版页显示在所有后续页面上的loginview内容。我在loginview中还嵌套了一个username控件,用于在用户登录时显示其名称。母版页中的登录视图代码显示如下:

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

]
由于VS2010在accounts文件夹中启动时有一个默认的登录页面,我认为没有必要创建一个单独的登录页面,所以我只使用了相同的登录页面。请在下面查找登录控件的代码:

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

帐户信息

用户ID: *

密码: *

让我登录

因为我有自己的数据库,所以我编写了自己的身份验证代码。以下显示登录按钮单击事件中的代码:

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


    }
公共部分类登录:System.Web.UI.Page
{
//创建字符串对象
字符串userIDStr,pwrdStr;
受保护的无效登录按钮单击(对象发送者,事件参数e)
{
//将文本框项目指定给字符串对象
userIDStr=logiuser.UserName.ToString();
pwrdStr=logiuser.Password.ToString();
//SQL连接字符串
字符串结构;
strConn=WebConfiguration Manager.ConnectionString[“CMSSQL3ConnectionString”]。ConnectionString;
SqlConnection Conn=新的SqlConnection(strConn);
//SqlDataSource CSMDataSource=新的SqlDataSource();
//CSMDataSource.ConnectionString=ConfigurationManager.ConnectionString[“CMSSQL3ConnectionString”].ToString();
//用于比较的SQL select语句
字符串sqlUserData;
sqlUserData=“从staff中选择StaffID、StaffPassword、StaffFName、staffname、StaffType”;
sqlUserData+=“其中(StaffID='”+userIDStr+')”;
sqlUserData+=“和(StaffPassword='”+pwrdStr+')”;
SqlCommand com=新的SqlCommand(sqlUserData,Conn);
SqlDataReader-rdr;
字符串usrdesc;
字符串名称;
字符串fname;
字符串staffname;
尝试
{
//字符串数据;
//CurrentData=(字符串)com.ExecuteScalar();
Conn.Open();
rdr=com.ExecuteReader();
rdr.Read();
usrdesc=(字符串)rdr[“StaffType”];
fname=(字符串)rdr[“StaffFName”];
lname=(字符串)rdr[“StaffLName”];
staffname=lname.ToString()+“”+fname.ToString();
LoginUser.UserName=staffname.ToString();
rdr.Close();
if(usrdesc.ToLower()=“管理员”)
{
重定向(“~/CaseAdmin.aspx”,false);
}
else if(usrdesc.ToLower()=“管理器”)
{
重定向(“~/CaseManager.aspx”,false);
}
else if(usrdesc.ToLower()=“研究者”)
{
Response.Redirect(“~/investor.aspx”,false);
}
其他的
{
Response.Redirect(“~/Default.aspx”,false);
}               
}
捕获(例外情况除外)
{
string script=“警报(“+ex.Message+”);”;
}
最后
{
康涅狄格州关闭();
}
}
我的身份验证工作正常,页面被重定向到指定的目标。但是,登录视图不显示用户名。实际上,我不知道如何将从数据库中选择的用户名传递到要显示的登录名控件

仔细一看,我还注意到成功登录后应该显示的注销文本没有显示。这让我想知道母版页上的loggedin模板控件是否会触发,或者它仍然是一直显示的匿名模板控件


如何使其按预期工作?请帮助……

我知道登录控件必须从成员资格提供程序获取数据。 但由于您使用的是自己的登录系统,因此无法使用登录控件来显示数据

如果希望允许登录控件自动显示数据,请使用成员资格类

或者,如果您想拥有自己的登录系统,那么可以通过实现抽象类MembershipProvider来创建自定义成员资格提供程序


另一种方法是,如果您不想使用成员资格提供程序,则手动更新控件上的用户信息。

我刚刚遇到了同样的问题。使用表单身份验证和类似于OP的设置

要解决此问题,我在应用程序中执行了以下操作:

using System.Web.Security;
然后设置登录名:

FormsAuthentication.SetAuthCookie(usr.Username, false);
我的web.config中有以下内容:

    <authentication mode="Forms">
        <forms loginUrl="~/Login.aspx" protection="All" timeout="30" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="~/Default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/>
    </authentication>
    <authorization>
        <deny users="?"/>
    </authorization>

很抱歉回复了一篇旧帖子,但我对答案的搜索将我带到了这里,直到我自己发现它