在异步方法中重定向页面

时间:2013-11-08 19:03:03

标签: c# jquery asp.net redirect

要求: 当我在后台执行一个方法并重定向到该方法返回的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>

1 个答案:

答案 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中描述。