<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>

    
<asp:DropDownList ID="IDENTITY_DESCRIPTION" runat="server" class="select01"
DataTextField
="IDENTITY_DESCRIPTION" DataValueField="IDENTITY_ID"
onselectedindexchanged
="IDENTITY_DESCRIPTION_SelectedIndexChanged" AutoPostBack="true" >
</asp:DropDownList>

........

  
</ContentTemplate>
</asp:UpdatePanel>

后台代码:
protected void IDENTITY_DESCRIPTION_SelectedIndexChanged(object sender, EventArgs e)  
{
  Page.ClientScript.RegisterStartupScript(
this.GetType(), "NewIdentityChange1", "<script>alert('123');</script>");
}
DropDownList在UpdatePanel里面,使用上述方法注册脚本,则不会执行该脚本,没有任何反应。如果我们换另外一种注册脚本的方法:
protected void IDENTITY_DESCRIPTION_SelectedIndexChanged(object sender, EventArgs e)
{
  ScriptManager.RegisterStartupScript((System.Web.UI.Page)HttpContext.Current.CurrentHandler,
typeof(System.Web.UI.Page), "NewIdentityChange1", "alert('123');", true);
}
OK!注册脚本成功,执行脚本。

具体原因是什么呢,我网上查了下资料,发现:
ScriptManager和ClientScript方法是一样的,只是在特殊的场合要注意使用。ScriptManager适用在特殊的场合,如果有updatepanel就用ScriptManager;没有的话当然用ClientScript,避免每次postback操作时控件都要进行资源文件的注册。也就是说是否兼容ajax的问题,ScriptManager兼容于ajax,在ajax updatepanel中使用ClientScript是无效的。


ScriptManager.RegisterStartupScript参数详解:
第一个参数为要注册脚本的控件ID,试了一下,只要是本页面的就行。 
第二个参数为注册脚本控件类型,是控件还是this的GetType()都可以,typeOf(string)也没问题。
第三个脚本函数的名字,随便起。 
第四个是脚本内容。 
第五个是标明是否再添加脚本标签,如果第四个参数里包含了 <script> </script>标签,此处则为false,否则为true。

其实,还有一种解决方法,就是把DropDownList放在UpdatePanel外面,使用Page.ClientScript.RegisterStartupScript注册脚本。
之后我又发现,即使DropDownList在UpdatePanel里面,我们使用Page.ClientScript.RegisterStartupScript注册脚本也可以,只要加上PostBackTrigger:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <Triggers>
    
<asp:PostBackTrigger ControlID="IDENTITY_DESCRIPTION" />
  
</Triggers>
<ContentTemplate>

    
<asp:DropDownList ID="IDENTITY_DESCRIPTION" runat="server" class="select01"
DataTextField
="IDENTITY_DESCRIPTION" DataValueField="IDENTITY_ID"
onselectedindexchanged
="IDENTITY_DESCRIPTION_SelectedIndexChanged" AutoPostBack="true" >
</asp:DropDownList>

........

  
</ContentTemplate>
</asp:UpdatePanel>

页面中的DropDownList,由于我设置AutoPostBack="true",所以当选项变更时,会进行PostBack,所以才使用UpdatePanel,避免页面刷新,不过这样就有问题了,因为提交按钮是需要PostBack的,而不是AsyncPostBack。

某些控件因位于 UpdatePanel 中,所以它是异步回送的,而某些特殊情况下,我们却希望该控件实现整页回送。
参考了一些资料,主要是关于UpdatePanel中Trigger的使用,最后加了这么一句代码,就解决了问题。这是指定提交按钮要触发PostBack,哪怕该控件是放置在UpdatePanel中。

PostBackTrigger 只有一个属性:ControlID。PostBackTrigger 用来指定在UpdatePanel中的某个服务端控件,它所引发的回送不使用异步回送,而仍然是传统的整页回送。