要求: 当我在后台执行一个方法并重定向到该方法返回的url时,用户调用一个页面并且我正在加载显示页面。
尝试在pageload中使用async方法调用,pagenotredirected为已加载。 尝试从异步方法更新文本框,并调用textboxonchange不作为页面aleady加载 已根据您的建议添加了ajax的代码,请查看
我称之为内页面加载和我显示加载信息的页面加载一个异步方法,异步methos完成后,我收到了网址,IAM试图重定向到URL,但IAM无法做到这一点异步里面的页面已经加载,所以我用这个网址更新一个隐藏的文本框,并在该文本框中使用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文件,我在其中调用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#方法是sync方法并返回这样的URL
[System.Web.Services.WebMethod()]
public static string ConvertToBatch()
{
some process
return urlstring;
}
我还在aspx页面的顶部添加了js文件名,但没有被调用,这是正确的方法吗
<script type="text/javascript" src="/Scripts/jqueryFile.js"></script>
答案 0 :(得分:1)
不是从页面加载中调用异步方法,而是在加载页面后使用JavaScript中的AJAX调用它。然后,您可以使用来自AJAX请求的响应来检索用于触发导航的URL。
<script>
$(function()
{
$.ajax(
{
url: "/api/request",
}).done(function(responseUrl)
{
window.location.href = responseUrl;
});
});
</script>
这将等待页面加载,向服务器发出一些请求,然后导航到响应字符串(期望HTTP响应主体成为URL)。
我认为您将使用ASMX Web服务或更好的ASP.NET Web API控制器来处理实际的请求/响应。
我知道使用Visual Studio 2013,您可以创建一个包含Web API的ASP.NET Web窗体项目,并自动配置它们以协同工作。如果您正在使用现有项目,则可以将Web API添加为NuGet包,并添加适当的管道,以便通过简单地查看VS2013向导生成的项目作为其完成方式的示例来手动工作。
编辑:
您似乎找到了另一种处理使用WebMethod的AJAX调用的方法。 WebMethods在this question中描述。