Закрыть текущий вид в ASP.NET MVC - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть страница с именем PayOut.cshtml. На этой странице у меня есть кнопка с именем Pay, которая открывает новое маленькое окно с именем Authenticate.cshtml, чтобы пользователь мог аутентифицировать себя, указав свой адрес электронной почты и пароль.

После того, как пользователь прошел аутентификацию, Authenticate.cshtml должен быть отклонен, и на странице PayOut.cshtml отображается кнопка с именем Confirm.

Я пробовал следующее:

public AuthenticateController(Authenticate obj)
{
      var success = false;

      if (auth) {
         success = true;
      }

      return View("close");
}

Просмотр для закрытия:

<body>
    <script type="text/javascript">
        window.close();
    </script>
</body>

Как можно закрыть представление аутентификации и показать кнопку в представлении PayOutс помощью сессии? Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Вы можете использовать «postMessage», в главном окне использовать что-то вроде этого:

<!DOCTYPE html>
<html>
   <header>
      <title>PostMessage Demo</title>
  </header>
  <body>
    <button id="btn" onclick="openPopup();">Open Popup</button>
    <script>

        window.addEventListener("message", onMessage, false);

        function onMessage(event){
            document.getElementById("btn").innerText = "you typed " + event.data;
            document.getElementById("btn").disabled = false;
        };

        function openPopup(){
            document.getElementById("btn").textContent = "popup active";
            document.getElementById("btn").disabled = true;
            window.open("/popup", "popup window");
        }

     </script>
   </body>
</html>

Затем во всплывающем окне это:

<!DOCTYPE html>
<html>
    <header>
        <title>Popup</title>
    </header>
    <body>
        <input id="textEdit" type="text" value=""></input>
        <button onclick="_close();">Close popup</button>
        <script>

            function _close(){
            let pUri = window.location.protocol + "//" + window.location.host + "/";
            window.opener.postMessage(document.getElementById("textEdit").value, pUri);
            window.close();
        }

        </script>
    </body>
</html>

Когда вы нажимаете «ЗакрытьВсплывающая кнопка »во всплывающем окне закрывается и вызывает событие onMessage в главном окне с текстом, введенным вами во вводе« textEdit ».

0 голосов
/ 30 сентября 2019

Из соображений безопасности спецификации на самом деле этого не позволяют. Хотя я только что проверил это с Edge, Chrome, Firefox и IE, и это сработало. Не могли бы вы уточнить, как это не сработало?

Во всяком случае, я решил попробовать другой метод, который не подразумевает закрытие окна, и он работал в тех же четырех браузерах.

В Payout.cshtml

   var newWindow;
    function authenticate() {
        newWindow = window.open("@Url.Action("Authenticate")");
        window.setTimeout(tryCloseWindow, 5000);
    }
    function tryCloseWindow() {
        try {
            if (newWindow.closeMe == undefined) {
                window.setTimeout(tryCloseWindow, 1000);
                return;
            }
        } catch(ex) {
            // window was closed by user
            return;
        }

        newWindow.close();
    }

Authenticate.cshtml

<button onclick="pay();">pay</button>

@section Scripts
{
    <script>
        function pay() {
            window.location = "@Url.Action("Close")";
        }
    </script>
}

Close.cshtml

@section Scripts
{
    <script>
        window.closeMe = true;
    </script>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...