как отобразить имя пользователя в контроле имени входа - PullRequest
5 голосов
/ 10 января 2011

У меня есть главная страница, которая содержит контент для входа в систему, который отображается на всех последующих страницах на основе главной страницы.У меня есть элемент управления именем пользователя, также вложенный в виде входа в систему для отображения имени пользователя при входе в систему. Код для входа в систему с главной страницы отображается следующим образом:

<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 запускается сстраница входа по умолчанию в папке с учетными записями, я не думал, что нужно создавать отдельную страницу входа в систему, поэтому я просто использовал ту же страницу входа в систему.пожалуйста, найдите код для контроля входа ниже:

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

Затем я написал свой собственный код для аутентификации, так как у меня была собственная база данных.ниже показан код события нажатия кнопки входа в систему ::1007*

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


    }

Моя проверка подлинности работает отлично, и страница перенаправляется в указанное место назначения.Тем не менее, представление входа не отображает имя пользователя.я на самом деле не могу понять, как передать имя пользователя, которое я выбрал из базы данных, в элемент управления именем входа для отображения.

при внимательном рассмотрении я также заметил текст выхода из системы, который должен отображаться после успешного журналав не показывает.это заставляет меня задуматься, запускается ли вообще элемент управления loggedin на главной странице или он все еще остается анонимным элементом управления, который продолжает отображаться .?

Как мне заставить работать так, как ожидалось?Пожалуйста, помогите ....

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Что я знаю, так это то, что элементы управления входом привязаны к данным Fetch от поставщика членства. Но так как вы используете свою собственную систему входа в систему. Не удается получить контроль входа для отображения данных.

Если вы хотите, чтобы элементы управления входом автоматически отображали данные, используйте классы членства

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

или если вы хотите иметь собственную систему входа в систему, то создайте пользовательский поставщик членства с помощью реализации абстрактного класса MembershipProvider. вот хороший ресурс по этому

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

Другим способом является обновление информации о пользователях вручную на элементах управления, если вы не хотите использовать членство провайдера.

0 голосов
/ 04 февраля 2015

У меня только что возникла такая же проблема. Использование проверки подлинности с помощью форм и настройки, аналогичной настройке OP.

Чтобы решить эту проблему, я сделал следующее в моем приложении:

using System.Web.Security;

, а затем установить LoginName:

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>

Извините за ответ на старый пост, но мой поиск ответов привел меня сюда, пока я не обнаружил его для себя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...