2009-06-02 6 views
0

ich ein Account-Management-Controller schrieb und habe Löschen von eigenem Benutzerkonto separat zu verarbeiten:Klar Request.IsAuthenticated Wert nach SignOut() ohne RedirectToAction()

[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 zeigt nach wie vor nur Abgemeldeter Benutzername beim Anzeigen der DeleteSelf-Ansicht, da die Werte Request.IsAuthenticated und Page.User.Identity immer noch nach FormsAuth.SignOut() gesetzt sind.

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

... 
    { 
     FormsAuth.SignOut(); 

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

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

Jede andere Ideen? Vielen Dank!

Antwort

1

ändern 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") %> ] 
<% } %> 
0

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

+0

Ich habe versucht, und erfuhr, was leider zu RedirectToAction entspricht ("DeleteSelf ") –

+0

Ist das nicht anders als bei Ihrem OP, das ist View View (" DeleteSelf ")? –

+0

Leider gleich. Aber ich denke jetzt, was eine separate Aktion hinzufügen, um eine Ansicht zu zeigen, ist ein übliches Muster. –

0

ich den Quellcode von Standard AccountController.cs Datei untersucht und gefunden habe zwei Methoden

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

und

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

die nur entsprechende Ansichten anzeigen. Also mein

Methode wird in solchen Unternehmen gut aussehen. Obwohl ich den Namen für Konsistenz ändern sollte.