Требование: пользователь вызывает страницу, и я показываю, что страница загружается, когда я выполняю метод в фоновом режиме и перенаправляю 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>
Вместо вызова метода 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.