2011-01-10 57 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> 

对不起回复旧帖子,但我的搜索找到答案,直到我发现它为我自己...

相关问题