强制 asp:LoginView 显示带有代码的匿名模板
Force an asp:LoginView to show the anonymous template with code
我有一个带有按钮按钮的登录视图,允许匿名用户登录,当用户登录时将显示注销按钮。当用户点击注销按钮时,用户应该被注销并且匿名模板应该被显示。
我可以注销用户,但 loginView 继续显示经过身份验证的模板。如何让它显示匿名模板?
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
<asp:Label ID="Label1" runat="server" Text="Label" CssClass="user-login">Guest</asp:Label>
<button id="guestSignIn" type="button" class="btn-user bg-anonymous" data-toggle="modal" data-target="#loginModal">Login</button>
</AnonymousTemplate>
<LoggedInTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Images/Home-icon.png" Height="35" PostBackUrl="~/Profile.aspx" />
<asp:LoginName ID="LoginName1" runat="server" CssClass="user-login" />
<asp:Button ID="BtnLogOff" Text="Log out" CssClass="btn-user bg-user" runat="server" OnClick="LogOff" PostBackUrl="~/AboutMe.aspx" />
</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup Roles="User">
</asp:RoleGroup>
<asp:RoleGroup Roles="Admin">
<ContentTemplate>
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/Images/Home-icon.png" Height="20" CssClass=" mr-2" PostBackUrl="~/ProfilePage.aspx" />
<asp:LoginName ID="LoginName2" runat="server" CssClass="user-login" />
<asp:Button ID="BtnLogOff1" Text="Log out" CssClass="btn-user bg-admin" runat="server" OnClick="BtnLogOff_Click" PostBackUrl="~/AboutMe.aspx" />
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
protected void LogOff(object sender, EventArgs e)
{
Session.Clear();
Session.Abandon();
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Roles.DeleteCookie();
try
{
Session.Abandon();
FormsAuthentication.SignOut();
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Buffer = true;
Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
Response.Expires = -1000;
Response.CacheControl = "no-cache";
//Response.Redirect("login.aspx", true);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
我已经尝试了几乎所有我能想到或找到的东西。
感谢您的帮助。
您是否尝试过清除会话数据后在页面上调用Validate()
?
我明白了。提示在我从另一个论坛复制并粘贴的解决方案中。注释的代码行:
//Response.Redirect("login.aspx", true);
DaniDev 说我只收到了部分回发。这是因为我在按钮上设置了回发 URL。
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/Images/Home-icon.png" Height="20" CssClass=" mr-2" PostBackUrl="~/ProfilePage.aspx" />
如果我从 ImageButton 标记中删除 PostBackUrl 并使用 Response.Redirect 方法,我将得到一个完整的回发,当页面重新加载时,LoginView 将恢复为匿名模板。
感谢 DaniDev 的帮助,无论您身在何处!
我有一个带有按钮按钮的登录视图,允许匿名用户登录,当用户登录时将显示注销按钮。当用户点击注销按钮时,用户应该被注销并且匿名模板应该被显示。
我可以注销用户,但 loginView 继续显示经过身份验证的模板。如何让它显示匿名模板?
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
<asp:Label ID="Label1" runat="server" Text="Label" CssClass="user-login">Guest</asp:Label>
<button id="guestSignIn" type="button" class="btn-user bg-anonymous" data-toggle="modal" data-target="#loginModal">Login</button>
</AnonymousTemplate>
<LoggedInTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Images/Home-icon.png" Height="35" PostBackUrl="~/Profile.aspx" />
<asp:LoginName ID="LoginName1" runat="server" CssClass="user-login" />
<asp:Button ID="BtnLogOff" Text="Log out" CssClass="btn-user bg-user" runat="server" OnClick="LogOff" PostBackUrl="~/AboutMe.aspx" />
</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup Roles="User">
</asp:RoleGroup>
<asp:RoleGroup Roles="Admin">
<ContentTemplate>
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/Images/Home-icon.png" Height="20" CssClass=" mr-2" PostBackUrl="~/ProfilePage.aspx" />
<asp:LoginName ID="LoginName2" runat="server" CssClass="user-login" />
<asp:Button ID="BtnLogOff1" Text="Log out" CssClass="btn-user bg-admin" runat="server" OnClick="BtnLogOff_Click" PostBackUrl="~/AboutMe.aspx" />
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
protected void LogOff(object sender, EventArgs e)
{
Session.Clear();
Session.Abandon();
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Roles.DeleteCookie();
try
{
Session.Abandon();
FormsAuthentication.SignOut();
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Buffer = true;
Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
Response.Expires = -1000;
Response.CacheControl = "no-cache";
//Response.Redirect("login.aspx", true);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
我已经尝试了几乎所有我能想到或找到的东西。
感谢您的帮助。
您是否尝试过清除会话数据后在页面上调用Validate()
?
我明白了。提示在我从另一个论坛复制并粘贴的解决方案中。注释的代码行:
//Response.Redirect("login.aspx", true);
DaniDev 说我只收到了部分回发。这是因为我在按钮上设置了回发 URL。
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/Images/Home-icon.png" Height="20" CssClass=" mr-2" PostBackUrl="~/ProfilePage.aspx" />
如果我从 ImageButton 标记中删除 PostBackUrl 并使用 Response.Redirect 方法,我将得到一个完整的回发,当页面重新加载时,LoginView 将恢复为匿名模板。
感谢 DaniDev 的帮助,无论您身在何处!