requectToaction ()가없는 signout () 이후에 명확한 요청.
-
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는 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");
}
방법은 그러한 회사에서 잘 보일 것입니다. 일관성을 위해 이름을 변경해야합니다.
제휴하지 않습니다 StackOverflow