【问题标题】:How to cancel a search process in ASP .NET如何在 ASP .NET 中取消搜索过程
【发布时间】:2014-12-26 15:12:03
【问题描述】:

我目前正在开发一个 ASP .Net 项目。我有一个搜索按钮,按下它后,会建立到 WCF 的连接,然后检索数据。我想添加一个取消按钮,并且我想在按下取消按钮时取消搜索过程。问题是我无法中断回发,所以无论我做什么,我都无法在过程中间停止搜索。我试图通过调用以下命令从 javascript 刷新页面:location.reload(true);。但它不会工作。它将等到回发完成,然后重新加载页面。我也尝试在按下取消后中止 WCF 连接,但结果是一样的。谁能帮帮我?

【问题讨论】:

  • 使用 Ajax 进行调用以加载数据。这将使主浏览器线程可以随时取消它。
  • tnx 为您提供帮助。我试试看
  • @ChrisLively 我试着照你说的做。问题是如果我使用 ajax,我将不得不调用带有“[WebMethod]”标签的静态方法。这样我就无法访问我的非静态页面组件。
  • 听起来你有三个选择。 1. 接受一个长期运行的进程来锁定浏览器的想法。 2. 修复导致您的流程耗时过长的问题。 3. 重新构建解决方案,使您没有这些依赖项。
  • @ChrisLively tnx 供您发表评论。我们遵循选项 3。通过使用 .asmx 服务,我们为用户提供了一个时间窗口,他们可以取消该过程。我们发现,如果进行了回发,除了关闭浏览器之外没有办法中断它。我应该为她的问题发布分析器吗?再次感谢您的帮助。

标签: javascript asp.net wcf


【解决方案1】:

好的,我们终于找到了答案。首先,我们发现如果回发已经完成,我们无法阻止它。我们可以取消搜索的唯一方法时间窗口是从 WCF 服务获取数据的时间(注意,客户端请求数据,然后请求被转发到 WCF 服务,然后 WCF服务从数据库中获取数据)。一旦请求从 WCF 服务返回,就没有什么(据我们所知)可以取消搜索过程。 我们还尝试在每次请求数据时创建新线程/任务。问题是,当创建新线程/任务时,与客户端的连接丢失,因为我们无法更新我们的组件(例如 gridview)。 正如 cmets 中所建议的,我们尝试通过来自 AJAX 的调用来进行数据检索过程。 AJAX 调用的问题是我们必须使用带有[WebMethod] 标签的静态方法,这使得我们无法使用我们的非静态成员。 最后,解决方案是: 1-我们将数据请求功能移至客户端(javascript) 2- 我们使用了.asmx 服务。这使得从 javascript 调用非静态函数成为可能 这给了我们一个时间窗口,我们可以用它来取消搜索过程,从用户按下搜索的时间开始,直到我们从 WCF 服务返回数据。 最后,你可以去Call non-static method in server-side from client-side using JavsScript看看如何使用.asmx服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多