Frage

Ich schreibe einen Account-Management-Controller und habe Löschen von eigenem Benutzerkonto verarbeiten getrennt:

[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");
}

Aber Teilansicht LogOnUserControl.ascx noch zeigt protokolliert nur Benutzernamen, während DeleteSelf Ansicht angezeigt wird, weil Request.IsAuthenticated und Page.User.Identity Werte noch nach FormsAuth.SignOut eingestellt werden ().

eine neue Aktion ShowDeleteSelfMessage Hinzufügen könnte das Problem lösen, aber ich weiß nicht, wie diese Lösung:

    ...
    {
        FormsAuth.SignOut();

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

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

Jede andere Ideen? Vielen Dank!

War es hilfreich?

Lösung

Ändern Sie Ihre LogOnUserControl.ascx mit Viewdata zu behandeln [ "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") %> ]
<% } %>

Andere Tipps

In Delete Aktion statt return View("DeleteSelf"), versuchen Sie diese return Redirect("DeleteSelf")

Ich habe den Quellcode des Standard AccountController.cs Datei untersucht und festgestellt, zwei Methoden

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

und

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

, die nur entsprechende Ansichten zeigen. Also mein

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

Methode wird in einem solchen Unternehmen gut aussehen. Obwohl ich soll den Namen für die Konsistenz verändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top