0

私はアカウント管理コントローラーを作成しており、自分のユーザーのアカウントの削除を個別に処理する必要があります。

[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ビューを表示しているときにログアウトしたユーザー名を表示します。

新しいアクションShowDeleteSelfMessageを追加すると問題を解決できますが、この解決策は好きではありません。

    ...
    {
        FormsAuth.SignOut();

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

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

他のアイデアはありますか?ありがとうございました!

4

3 に答える 3

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") %> ]
<% } %>
于 2009-06-02T19:24:55.053 に答える
0

Delete実際には、代わりにこれreturn View("DeleteSelf")を試してくださいreturn Redirect("DeleteSelf")

于 2009-06-02T10:12:16.433 に答える