2016-11-18 70 views
0

是否有可能在异步方法中调用ScriptManager.ClientScript.RegisterClientScriptBlockRegisterClientScriptBlock与异步服务器端按钮点击处理程序

场景:用户在文本框中输入搜索值并单击按钮。在服务器侧按钮点击处理程序,代码隐藏发送web请求到第三方web服务:

protected async void Button_click(object sender, EventArgs e) 
    { 
     try 
      { 
       await QueryThirdPartyWebService(searchTerm); 
       <snip> 
      } 
     catch (Exception ex) 
     { 

      Utils.DoAlert(this, ex.Message); 
     }   
    } 

QueryThirdPartyWebService抛出异常,代码被正确地分支到catch块。

的DoAlert方法:

  string scriptContent = <snip> 

      System.Web.UI.ScriptManager.RegisterClientScriptBlock(
      MyPage, 
      typeof(System.Web.UI.Page), 
      "errorMessage", 
      scriptContent, 
      true); 

然而,DoAlert方法没有做任何事情。它在非异步上下文中可以正常工作,但在从async方法中调用而不是。通过DoAlert方法,没有例外。

回答

0

RegisterClientScriptBlock的意思是,当发送整个页面的HTML和脚本到客户端时...脚本将被插入到HTML中,并且弹出框将在客户端加载页面时工作。在异步中,您只需获取数据并返回,并且您应该在客户端拥有一些JavaScript来处理返回并生成并提醒的数据。这里有很多代码,但基本上按钮的点击事件触发了一些JavaScript,如果你喜欢,它可以在你的页面中,并且该JavaScript会触发对服务器方法的请求。然后JavaScript分析响应并触发警报。

要开始看看这个,并调查我所说的话。

http://www.w3schools.com/jquery/ajax_post.asp

你可能会喜欢看角JS,这是很容易和伟大。

+0

您是说没有办法在*服务器端*代码中向远程Web服务发出异步请求,并向UI报告错误?我正在使用带ASP.NET Ajax的UpdatePanel。我在其他应用程序中使用了纯HTML + JavaScript,所以我熟悉那种你推荐的方法。 – Tim

+0

哦,你正在使用UpdatePanel ......嗯不知道细节,但在幕后它仍然只是改变客户端文档的一部分。这个chappy说,它不起作用,但提供了一种方法来使其工作。 ... http://www.aspsnippets.com/Articles/Show-JavaScript-Alert-Message-inside-AJAX-UpdatePanel-in-ASPNet.aspx –