Заставить asp: LoginView показать анонимный шаблон с кодом - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть loginView с кнопкой, позволяющей анонимному пользователю войти в систему, и когда пользователь вошел в систему, будет отображена кнопка выхода из системы. Когда пользователь нажимает кнопку выхода из системы, пользователь должен выйти из системы и отобразить анонимный шаблон.

Я могу выйти из системы, но 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);
        }
}

Я перепробовал все, что мог придумать или найти.

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Я понял это. Подсказка была в решении, которое я скопировал и вставил с другого форума. Комментируемая строка кода:

//Response.Redirect("login.aspx", true);

ДаниДев сказал, что я получаю только частичную обратную передачу. Это было потому, что я установил URL обратной ссылки на кнопку.

<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/Images/Home-icon.png" Height="20" CssClass=" mr-2" PostBackUrl="~/ProfilePage.aspx" />

Если я удаляю PostBackUrl из тега ImageButton и использую метод Response.Redirect, я получаю полную обратную передачу, и после перезагрузки страницы LoginView возвращается к анонимному шаблону.

Спасибо за помощь DaniDev, где бы вы ни находились !!

0 голосов
/ 04 сентября 2018

Вы пытались вызвать Validate() на странице после очистки данных сеанса?

...