我正在编写帐户管理控制器,必须单独处理删除自己用户的帐户:
[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视图时仍显示刚刚注销的用户名,因为在FormsAuth.SignOut()之后仍然设置了Request.IsAuthenticated和Page.User.Identity值。
添加新动作ShowDeleteSelfMessage可以解决问题,但我不喜欢这个解决方案:
...
{
FormsAuth.SignOut();
return RedirectToAction("ShowDeleteSelfMessage");
}
...
public ActionResult ShowDeleteSelfMessage()
{
return View("DeleteSelf");
}
还有其他想法吗?谢谢!
答案 0 :(得分:1)
更改LogOnUserControl.ascx以处理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") %> ]
<% } %>
答案 1 :(得分:0)
在Delete
操作中,而不是return View("DeleteSelf")
,请尝试此return Redirect("DeleteSelf")
答案 2 :(得分:0)
我检查了标准AccountController.cs文件的源代码,发现了两个方法
public ActionResult ChangePasswordSuccess()
{
return View("ChangePasswordSuccess");
}
和
public ActionResult RestorePasswordSuccess()
{
return View("RestorePasswordSuccess");
}
仅显示相应的视图。所以我的
public ActionResult ShowDeleteSelfMessage()
{
return View("DeleteSelf");
}
方法在这样的公司看起来不错。虽然我应该更改名称以保持一致性。