Перенаправить страницу внутри асинхронного метода

0

Требование: пользователь вызывает страницу, и я показываю, что страница загружается, когда я выполняю метод в фоновом режиме и перенаправляю URL-адрес, возвращаемый методом.

Пробовал использовать метод async-метода в pageload, pagenotredirected как уже загружен. Пробовал обновлять текстовое поле из метода async и вызывать textboxonchange не работает как страница aleady загружена Добавил код для ajax на ur предложение пожалуйста, просмотрите

Я вызываю метод async внутри pageload, а в pageload я показываю сообщение для загрузки, после завершения async methos я получаю url, iam пытается перенаправить на этот url, но iam не может сделать это внутри async, поскольку страница уже загружена, поэтому iam, обновляя скрытый текстовый ящик с этим URL-адресом и используя событие onchange в этом текстовом поле и перенаправляя, но все же страница не перенаправляется, может кто-то предложить лучший способ сделать это? Спасибо

 <asp:TextBox runat="server" ID="urlTextBox" Value="" Style="display:none;" AutoPostBack="true" ></asp:TextBox>

  $(document).ready(function () {
  $('#urlTextBox').change(function () {
             var keyword = $("#urlTextBox").val();
             if (keyword.length > 0) {
                 window.location.href = keyword;
             }       
         });

   urlTextBox.Text = url;

urltextbox получает значение внутри метода async, поскольку я обрабатываю длительный процесс внутри async, чтобы получить этот URL-адрес

Я добавил файл js, в котором я вызываю метод С#

 $(document).ready(function () {
  $('#outputFromCmdLine').Text = "Loading...";
  GetOutputFromCommandLine();   
 });

 function GetOutputFromCommandLine() {  
  $.ajax({
    type: "POST",
    url: "Page.aspx/ConvertToBatch", //url to point your webmethod     
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async:true,
    success: function (Result) {
        window.location.href = Result;
    },
    error: function (request, status, error) {
        alert(request.responseText);
    }
});

и метод С# является методом синхронизации и возвращает URL-адрес, подобный этому

  [System.Web.Services.WebMethod()]
    public static string ConvertToBatch()
    {
   some process
   return urlstring;
    }

Я также добавил имя файла js в верхней части страницы aspx, но ничего не вызвано, это правильный способ сделать это

 <script type="text/javascript" src="/Scripts/jqueryFile.js"></script>
  • 0
    Скорее всего, событие изменения никогда не инициируется, поскольку пользователь не является источником этого изменения.
  • 0
    Я проверял это, на самом деле событие запускается, если я изменяю текстовое поле в коде до загрузки страницы, и он перенаправляет на эту страницу, но если я помещаю его в асинхронный режим, который завершается только после загрузки страницы, событие не инициируется.
Показать ещё 7 комментариев
Теги:
redirect

1 ответ

1
Лучший ответ

Вместо вызова метода async изнутри загрузки страницы вы должны вызвать его с помощью AJAX в JavaScript после загрузки страницы. Затем вы можете использовать ответ из запроса AJAX для получения URL-адреса, с помощью которого можно вызвать навигацию.

<script>
    $(function()
    {
        $.ajax(
        {
            url: "/api/request",
        }).done(function(responseUrl)
        {
            window.location.href = responseUrl;
        });
    });
</script>

Это будет ждать загрузки страницы, сделать запрос на сервер и перейти к строке ответа (ожидая, что тело ответа HTTP будет URL-адресом).

Я думаю, вы бы использовали веб-службу ASMX или еще лучше, но ASP.NET Web API-контроллер для обработки фактического запроса/ответа.

Я знаю, что с помощью Visual Studio 2013 вы можете создать проект ASP.NET Web Forms, который включает веб-API и автоматически настраивает их для совместной работы. Если вы работаете с существующим проектом, вы можете добавить веб-API в виде пакета NuGet и добавить соответствующую сантехнику, чтобы заставить ее работать вручную, просто взглянув на проект, созданный мастером VS2013, в качестве примера того, как это делается.

РЕДАКТИРОВАТЬ:

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

  • 0
    извините, я не смог получить вас, поэтому я смогу вызвать эту функцию ajax со стороны сервера, передавая URL-адрес?
  • 0
    Нет, AJAX вызывается со стороны клиента.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню