2016-11-18 98 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 –