0

要求:用户调用一个页面,当我在后台执行一个方法并重定向到该方法返回的 url 时,我显示页面正在加载。

尝试在页面加载中使用异步方法调用,页面未重定向为已加载。尝试从异步方法更新文本框并调用 textboxonchange 无法正常加载页面已根据您的建议添加了 ajax 代码,请查看

我在 pageload 中调用了一个异步方法,并在 pageload 中显示了加载消息,在异步方法完成后我得到一个 url,我试图重定向到该 url,但由于页面已经加载,我无法在异步内部执行它,所以我正在用这个 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;
    }

我还在aspx页面顶部添加了js文件名,但是没有调用,这是正确的方法吗

 <script type="text/javascript" src="/Scripts/jqueryFile.js"></script>
4

1 回答 1

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,您可以创建一个 ASP.NET Web 窗体项目,其中包括 Web API 并自动配置它们以协同工作。如果您正在使用现有项目,您可以将 Web API 添加为 NuGet 包并添加适当的管道以使其手动工作,只需查看 VS2013 向导生成的项目作为其完成方式的示例。

编辑:

您似乎找到了另一种使用 WebMethod 来处理 AJAX 调用的方法。这个问题中描述了 WebMethods 。

于 2013-11-08T19:15:42.963 回答