Question

Je suis en train d'écrire un contrôleur de gestion de compte et doivent traiter la suppression du compte propre utilisateur séparément:

[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(string userName, string confirmButton)
{
    MembershipService.DeleteUser(userName);

    if (User.Identity.Name.Equals(userName,
        StringComparison.InvariantCultureIgnoreCase))
    {
        FormsAuth.SignOut();

        return View("DeleteSelf");
    }
    else
        return RedirectToAction("Index");
}

Mais LogOnUserControl.ascx vue partielle montre encore juste déconnecté nom d'utilisateur tout en affichant vue DeleteSelf parce que les valeurs Request.IsAuthenticated et Page.User.Identity sont encore fixés après FormsAuth.SignOut ().

Ajout d'un nouveau ShowDeleteSelfMessage d'action pourrait résoudre le problème, mais je n'aime pas cette solution:

    ...
    {
        FormsAuth.SignOut();

        return RedirectToAction("ShowDeleteSelfMessage");
    }
    ...

public ActionResult ShowDeleteSelfMessage()
{
    return View("DeleteSelf");
}

D'autres idées? Merci!

Était-ce utile?

La solution

Changez votre LogOnUserControl.ascx pour traiter ViewData [ "userDeleted"]:

[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(string userName, string confirmButton)
{
    MembershipService.DeleteUser(userName);

    if (User.Identity.Name.Equals(userName,
        StringComparison.InvariantCultureIgnoreCase))
    {
        FormsAuth.SignOut();

        // ***
        ViewData["UserDeleted"] = true;
        // ***

        return View("DeleteSelf");
    }
    else
        return RedirectToAction("Index");
}

LogOnUserControl.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% if (Request.IsAuthenticated && !(ViewData["UserDeleted"] ?? false)) { %>
    Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!
    [ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]
<% } else { %> 
    [ <%= Html.ActionLink("Log On", "LogOn", "Account") %> ]
<% } %>

Autres conseils

En action Delete, au lieu de return View("DeleteSelf"), essayez cette return Redirect("DeleteSelf")

J'ai examiné le code source de fichier standard AccountController.cs et trouvé deux méthodes

public ActionResult ChangePasswordSuccess()
{
    return View("ChangePasswordSuccess");
}

et

public ActionResult RestorePasswordSuccess()
{
    return View("RestorePasswordSuccess");
}

qui ne montrent que des vues correspondant. Donc, mon

public ActionResult ShowDeleteSelfMessage()
{
    return View("DeleteSelf");
}
méthode

aura l'air bien dans une telle entreprise. Bien que je devrais changer le nom de la cohérence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top