Asp.Net Ajax编程时,首先就得托一个ScriptManager,尽管不对它做任何操作。添加后就能正确运行,不添加就提示有错。具体为什么呢?本文就ScriptManager控件做详细介绍。
这也就是尽管控件不做任何操作,还需把它引过来。
web.config
说明: 在异步处理中发生错误,想要跳转到指定的页面时,只需修改AllowCustomErrorsRedirect属性值,且跳转页面是在.config文件中定义的。
2),捕获错误
说明:
AsyncPostBackErrorMessage属相设置发送到浏览器的消息提示。如上实例,在浏览器页面就能显示错误的信息。
说明:
1,上面两个代码都能弹出提示框。RegisterStartupScript属相为控件UpdatePanel注册一个启动脚本块,并将该脚本添加到页面中;RegisterClientScriptBlock属性在<form>开始标记之后呈现一个Script该脚本被指定为字符串参数。
2,区别:由于RegisterClientScriptBlock属性是在<form>标记开始之后使用的,由程序执行顺序可知RegisterClientScriptBlock设置的弹出框内容肯定显示在RegisterStartupScript设置的弹出框之前。
为什么要用ScriptManager
ScriptManager控件会向页面注册Microsoft Ajax library的脚本。使客户端脚本能够使用类型系统扩展并支持部分页呈现和Web服务调用这样的功能。这也就是尽管控件不做任何操作,还需把它引过来。
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
ScriptManager使用技巧
1,指定错误处理
1),出错跳转到指定页面
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager2" runat="server" AllowCustomErrorsRedirect="true" >
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
protected void Button1_Click(object sender, EventArgs e)
{
throw new Exception();
}
web.config
<system.web>
<compilation debug="false" targetFramework="4.0"/>
<customErrors mode="On" defaultRedirect="Error.aspx"></customErrors>
</system.web>
说明: 在异步处理中发生错误,想要跳转到指定的页面时,只需修改AllowCustomErrorsRedirect属性值,且跳转页面是在.config文件中定义的。
2),捕获错误
<asp:ScriptManager ID="ScriptManager1" runat="server" AllowCustomErrorsRedirect="false" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<script type="text/javascript" language="javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, e)
{
e.set_errorHandled(true);
$get("error").innerHTML = e.get_error().message;
});
</script>
protected void Button1_Click(object sender, EventArgs e)
{
throw new Exception("Error!");
}
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
ScriptManager.GetCurrent(this).AsyncPostBackErrorMessage = e.Exception.Message;
}
说明:
AsyncPostBackErrorMessage属相设置发送到浏览器的消息提示。如上实例,在浏览器页面就能显示错误的信息。
2,弹出框
如果使用了ScriptManager和UpdatePanel控件,则以往的弹出框Reseponse.Write()就不管用了。那么如果想要弹出提示框该怎么办?,既然微软能把Ajax技术封装成了控件,那么相关的信息肯定都在控件中能够找到。ScriptManager就能解决弹出框的问题。protected void Button1_Click(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "UpdatePanel1", "alert(1)", true);
ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, this.GetType(), "UpdatePanel1", "alert(2)", true);
}
说明:
1,上面两个代码都能弹出提示框。RegisterStartupScript属相为控件UpdatePanel注册一个启动脚本块,并将该脚本添加到页面中;RegisterClientScriptBlock属性在<form>开始标记之后呈现一个Script该脚本被指定为字符串参数。
2,区别:由于RegisterClientScriptBlock属性是在<form>标记开始之后使用的,由程序执行顺序可知RegisterClientScriptBlock设置的弹出框内容肯定显示在RegisterStartupScript设置的弹出框之前。
总结
ScriptManager是Asp.Net的服务器控件。管理客户端组件、局部页刷新等功能,在使用其他Ajax Extension控件前首先要添加ScriptManger控件