마스터 페이지를 기반으로 모든 후속 페이지에 나타나는 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>
<%-- [ <asp:LoginStatus ID="MasterLoginStatus" runat="server" LogoutAction="Redirect" LogoutPageUrl="~/Logout.aspx" /> ] --%>
</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에서의 로그인 된 템플릿 컨트롤이 전혀 작동하지 않거나 계속 표시되는 익명의 템플릿 컨트롤이라 할지라도 궁금합니다.
어떻게 예상대로 작동합니까? 제발 도와주세요 ....