Asp.net的LoggedInTemplate永远不会显示,只有AnonymousTemplate

时间:2015-08-30 16:30:54

标签: asp.net

我正在使用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>

3 个答案:

答案 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页面,但这可能很容易修复。