문제

계정 관리 컨트롤러를 작성하고 있으며 자신의 사용자 계정 삭제를 별도로 처리해야합니다.

[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는 request.isauthenticated 및 page.user.identity 값이 여전히 formsauth.signout () 이후에 설정되어 있기 때문에 Deleteself View를 표시하는 동안 사용자 이름을 표시하는 동안 방금 사용자 이름을 표시합니다.

새로운 액션 showdeleteselfmessage를 추가하면 문제가 해결 될 수 있지만이 솔루션은 마음에 들지 않습니다.

    ...
    {
        FormsAuth.SignOut();

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

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

다른 아이디어가 있습니까? 고맙습니다!

도움이 되었습니까?

해결책

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

다른 팁

~ 안에 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