是否有可能在异步方法中调用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 –