2013-11-08 2 views
0

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

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

я называю метод асинхронной внутри 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 получает значение внутри метода асинхронной, как я обрабатываю процесс долго работает внутри асинхронном, чтобы получить этот URL

Я добавлял JS файл, в котором я называю метод C#, как этот

$(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); 
    } 
}); 

и C# метод синхронизации метод и возвращает 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

Я тестировал, что на самом деле событие запускается, если я изменяю текстовое поле в коде до того, как страница загружается и перенаправляется на эту страницу, но если я поместил его в async, который завершается только после загрузки страницы, событие не запускается. – user2933504

+0

Может кто-то предложить лучший способ сделать это, пожалуйста, – user2933504

ответ

1

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

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

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

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

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

EDIT:

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

+0

извините, что я не мог 't получить вас так, я смогу назвать эту функцию ajax со стороны сервера, передавая url? – user2933504

+0

Нет, AJAX вызывается со стороны клиента. –

+0

жаль, что я не работал с ajax, поэтому, когда я просмотрел способ вызова метода C# из ajax и получить возвращаемое значение, говорят только, когда async = false сделает его работу, но мой метод isync в C#. Так я смогу показать загружаемое сообщение, когда я вызываю метод из ajax и обрабатываю его. – user2933504

Смежные вопросы