是否有可能在異步方法中調用ScriptManager.ClientScript.RegisterClientScriptBlock
?RegisterClientScriptBlock與異步服務器端按鈕點擊處理程序
場景:用戶在文本框中輸入搜索值並單擊按鈕。在服務器側按鈕點擊處理程序,代碼隱藏發送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
方法,沒有例外。
您是說沒有辦法在*服務器端*代碼中向遠程Web服務發出異步請求,並向UI報告錯誤?我正在使用帶ASP.NET Ajax的UpdatePanel。我在其他應用程序中使用了純HTML + JavaScript,所以我熟悉那種你推薦的方法。 – Tim
哦,你正在使用UpdatePanel ......嗯不知道細節,但在幕後它仍然只是改變客戶端文檔的一部分。這個chappy說,它不起作用,但提供了一種方法來使其工作。 ... http://www.aspsnippets.com/Articles/Show-JavaScript-Alert-Message-inside-AJAX-UpdatePanel-in-ASPNet.aspx –