2009-06-02 27 views
0

我正在寫一個帳戶管理控制器,並有單獨處理自己的用戶帳戶的刪除:清除Request.IsAuthenticated值後SignOut()不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"); 
} 

但局部視圖LogOnUserControl.ascx仍顯示只是在顯示DeleteSelf視圖時註銷用戶名,因爲Request.IsAuthenticated和Page.User.Identity值仍在FormsAuth.SignOut()後設置。

添加一個新的動作ShowDeleteSelfMessage可以解決這個問題,但我不喜歡這樣的解決方案:

... 
    { 
     FormsAuth.SignOut(); 

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

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

任何其他的想法?謝謝!

回答

1

更改LogOnUserControl.ascx應對計算機[ 「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

Delete行動,而不是return View("DeleteSelf"),試試這個return Redirect("DeleteSelf")

+0

我想和學到了什麼不幸的是,這相當於RedirectToAction(「DeleteSelf 「) –

+0

和你的OP沒什麼不同,它是return View(」DeleteSelf「)? –

+0

不幸的是一樣的。但我認爲現在加入單獨行動來表現觀點是常見模式。 –

0

我已經檢查標準AccountController.cs文件的源代碼,發現兩種方法

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

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

其中只顯示相應的意見。所以我的

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

方法在這樣的公司看起來不錯。雖然我應該改變名稱的一致性。