2011-01-10 6 views
5

마스터 페이지를 기반으로 모든 후속 페이지에 나타나는 loginview 내용을 보유하고있는 마스터 페이지가 있습니다. 나는 사용자 이름 컨트롤은 또한가 로그인 할 때 사용자의 이름을 표시합니다 loginview에 중첩 된 마스터 페이지에서 loginview에 대한 코드가 표시됩니다 다음과 같습니다.로그인 이름 컨트롤에 사용자 이름을 표시하는 방법

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

나는 내 자신의 데이터베이스를 가지고 있기 때문에 인증을위한 코드를 작성했습니다. 다음과 같은 로그인 버튼 이벤트를 코드를 표시합니다. :

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


    } 

내 인증 완벽하게 작동하고 페이지가 지정된 대상으로 리디렉션됩니다. 그러나 로그인보기에는 사용자 이름이 표시되지 않습니다. 나는 실제로 데이터베이스에서 선택한 사용자 이름을 로그인 이름 컨트롤로 전달하여 표시하는 방법을 알지 못합니다.

자세히 살펴보면 성공적으로 로그인 한 후에 표시해야하는 로그 아웃 텍스트가 표시되지 않습니다. 그것은 masterpage에서의 로그인 된 템플릿 컨트롤이 전혀 작동하지 않거나 계속 표시되는 익명의 템플릿 컨트롤이라 할지라도 궁금합니다.

어떻게 예상대로 작동합니까? 제발 도와주세요 ....

답변

2

내가 알고있는 것은 로그인 컨트롤이 회원 공급자로부터 데이터를 가져와야한다는 것입니다. 하지만 자신의 로그인 시스템을 사용하고 있기 때문에. 로그인 컨트롤을 사용하여 데이터를 표시 할 수 없습니다. 허용 할 경우

로그인이 자동으로 다음 사용 회원 클래스

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

또는 그런 추상 클래스는 MembershipProvider 구현하여 사용자 지정 멤버 자격 공급자를 만들고 자신의 로그인 시스템을 사용하려는 경우 데이터를 표시하는 제어합니다. heres는 그

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

또 다른 방법에 좋은 자원이

0

난 그냥이 같은 문제가 올했다 .. 당신은 멤버 자격 공급자를 사용하지 않으려는 경우 컨트롤에 수동으로 사용자 정보를 업데이트하는 것입니다 . 양식 인증 및 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> 

이전 게시물에 대한 답변은 죄송합니다.하지만 내 검색 결과는 나 자신을 위해 발견 될 때까지 여기에서 나를 안내했습니다 ...

관련 문제