RegisterClientScriptBlock与异步服务器端按钮单击处理程序

时间:2016-11-18 12:54:01

标签: c# asp.net asynchronous

是否可以在异步方法中调用ScriptManager.ClientScript.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方法,没有例外。

1 个答案:

答案 0 :(得分:0)

RegisterClientScriptBlock适用于将整页html和脚本发送到客户端...脚本将插入到html中,弹出框将在页面加载客户端时起作用。在异步中你只需要获取数据并返回以及你应该做什么它在客户端已经有一些javascript来处理返回的数据并产生和警告。那里有很多代码,但基本上按钮的点击事件会触发一些javascript,如果你愿意,可以在你的页面内,并且javascript会触发对服务器方法的请求。然后,javascript会分析响应并触发警报。

要开始使用,请按照我所说的内容进行调查。

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

你可能想看看Angular js,这很简单。