我写一个帐户管理控制器和具有单独处理自己的用户的帐户的删除:

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

方法将寻找在这样的公司良好。虽然我应的一致性改变名字。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top