• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Controller에서 프로세스 처리 완료 후 alert 띄우는 방법이 있을까요?

21.05.11 10:32 작성 조회수 685

0

TempData["Message"] 나 ModelState.AddModelError(string.Empty, message); 처럼
페이지 전환 후 안내문구를 보여주지 않고,

페이지 전환 전에 alert("수정되었습니다."); 문구를 보여줄 수 있는 방법이 있을까요?

  

답변 1

답변을 작성해보세요.

1

Hye Rim Park님, 반갑습니다.

페이지 전환 전에 alert 문구를 보여줄 방법에 대해 문의하셨네요.

아시다시피 ASP.NET Core의 기본동작이 페이지 전환 후 안내문구를 보여주도록 되어 있기에,

조금 편법을 써야합니다.

 

MembershipController의 UpdateInfo(UserInfo user) 액션 메서드를 예로 들면,

정보수정이 성공했을 때

return RedirectToAction("UpdateInfo", "Membership"); 이 부분을

ModelState.AddModelError("Success", "사용자 정보수정이 성공적으로 이루어졌습니다.");

return View(user); 로 변경합니다.

 

UpdateInfo.cshtml에서 

@{

    ViewData["Title"] = "멤버십 사용자 정보수정";

    Layout = "~/Views/Shared/_Layout.cshtml";

    string successMessage = !ViewData.ModelState.IsValid

                            && ViewData.ModelState["Success"] != null

                            && ViewData.ModelState["Success"].Errors.Count > 0 ?

                            ViewData.ModelState["Success"].Errors.First().ErrorMessage :

                            string.Empty;

}

@section Scripts {

    <script>

        let message = "@successMessage";

        if (message.length > 0) {

            alert(message);

            location.href = "@Url.Action("UpdateInfo", "Membership")";

        }

    </script>

}

윗부분을 이렇게 구성합니다.

successMessage에 "Success" 이름으로 등록된 error 정보가 있을 때 UpdateInfo 액션메서드에서 받은

Success 메시지를 뷰에서 받아 사용하는 것입니다.

결국 바로 RedirectToAction으로 페이지 이동하는 대신에,

자기 페이지로 다시 돌아와서 메시지를 출력한 후에 location.href 로 이동하는 것이죠.

즐거운 하루 되세요.