2011-01-10 56 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自定義成員提供。繼承人對

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> 

對不起回覆舊帖子,但我的搜索找到答案,直到我發現它爲我自己...

相關問題