我正在使用Microsoft Visual Studio 2013来构建网站。我希望母版页略有不同,具体取决于是否登录。为此,我使用<LoggedInTemplate>
和<AnonymousTemplate>
。然而,与LoggedInTemplate Not displayed处未回答的问题类似,无论我是否登录,目前始终显示后者。我在主页上的代码如下:
<asp:LoginView ID="LoginView2" runat="server">
<LoggedInTemplate>
<ul id="Loggedin">
<li><asp:LoginName ID="LoginName1" runat="server"/>User page</li>
<li><asp:LoginStatus ID="LoginStatus1" runat="server" /><a href="Logout.aspx">Log out</a></li>
</ul>
</LoggedInTemplate>
<AnonymousTemplate>
<ul>
<li><a href="Registration.aspx">Register</a></li>
<li><a href="Login.aspx">Log in</a></li>
</ul>
</AnonymousTemplate>
</asp:LoginView>
我的母版页.cs页面目前不包含任何代码(创建页面时创建的默认行除外)。 <LoggedInTemplate>
是否要求关联的.cs中的代码有效?如果是这样,它需要什么?
我的注销页面,根据是否已登录而行为不同(如果已登录则退出并显示页面;如果未登录则重定向到登录页面),就我能够正常工作而言告诉我,建议我登录程序正常。这就像我关于登录过程一样,所以如果<LoggedInTemplate>
不需要.cs文件中的代码,我会在登录和注销页面上发布代码以查看是否存在问题那里。
更新:Login.aspx.cs文件中的代码是
protected void LoginButton_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationsConnectionString"].ConnectionString);
conn.Open();
string checkuser = "select count(*) from RegistrationData where UserName='" + UserNameLogin.Text + "' ";
SqlCommand com = new SqlCommand(checkuser, conn);
int temp = Convert.ToInt32(com.ExecuteScalar().ToString());
conn.Close();
if (temp == 1)
{
conn.Open();
string checkPassword = "select password from RegistrationData where UserName='" + UserNameLogin.Text + "' ";
SqlCommand passCom = new SqlCommand(checkPassword, conn);
string password = passCom.ExecuteScalar().ToString().Replace(" ", "");
if (password == PasswordLogin.Text)
{
Session["New"] = UserNameLogin.Text;
Response.Redirect ("Default.aspx");
}
else Response.Write("Password is incorrect");
}
else
{
Response.Write("User does not exist");
}
}
为清楚起见,我的Web.Config(只是自动生成的代码)是:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="mwd" connectionString="Data Source=P425\SQLExpress;Initial Catalog=mwd;Integrated Security=SSPI;" />
<add name="RegistrationsConnectionString" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Registrations.mdf;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
</system.web>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
</configuration>
答案 0 :(得分:0)
您在webconfig文件的身份验证模式中拥有什么?
尝试类似于此:
<authentication mode="Forms">
<forms name="test" loginUrl="Login.aspx" defaultUrl="Default.aspx" cookieless="UseCookies" path="/"></forms>
</authentication>
另一种检查您是否使用User.Identity.Name获取用户名的方法,您可以在母版页的代码后面调试它。
答案 1 :(得分:0)
尝试将asp:LoginStatus置于模板之外。这样您就可以确定您的登录状态是什么。
同样如前所述,您可以检测您的用户是否通过Page的IsAuthenticated属性进行了身份验证。
答案 2 :(得分:0)
我设法通过添加
让<LoggedInTemplate>
工作
<authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="Default.aspx"></forms>
</authentication>
到<system.web>
标记内的Web.Config文件并替换
Session["New"] = UserNameLogin.Text;
Response.Redirect ("Default.aspx");
带
FormsAuthentication.RedirectFromLoginPage(UserNameLogin.Text, false);
并在Login.aspx.cs文件中添加using System.Web.Security;
。
这会破坏我的Logout.aspx页面,但这可能很容易修复。