SignOut()不RedirectToAction后清除Request.IsAuthenticated值()
-
06-09-2019 - |
题
我写一个帐户管理控制器和具有单独处理自己的用户的帐户的删除:
[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");
}
任何其他的想法?谢谢!
解决方案
变更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") %> ]
<% } %>
其他提示
在Delete
动作,代替return View("DeleteSelf")
,尝试这种return Redirect("DeleteSelf")
我已经研究标准AccountController.cs文件的源代码,发现两种方法
public ActionResult ChangePasswordSuccess()
{
return View("ChangePasswordSuccess");
}
和
public ActionResult RestorePasswordSuccess()
{
return View("RestorePasswordSuccess");
}
其中仅示出相应的视图。所以,我的
public ActionResult ShowDeleteSelfMessage()
{
return View("DeleteSelf");
}
方法将寻找在这样的公司良好。虽然我应的一致性改变名字。
不隶属于 StackOverflow