ScriptManager 控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,以及调用AuthenticationService和ProfileService,还有页面错误处理等。

 
主要内容
1 .控件概述
2 .一个简单的示例
3 .客户端脚本模式
4 .错误处理
5 .Services属性
6 .Scripts属性
 
一.控件概述
ScriptManager 控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,还可以指定页面错误处理等。
使用<asp:ScriptManager/>来定义一个ScriptManager,简单的ScriptManager定义形式:
< asp:ScriptManager  ID ="ScriptManager1"  

                   runat ="server" >

       < AuthenticationService  Path =""  />

       < ProfileService  LoadProperties =""  Path =""  />

       < Scripts >

        <asp:ScriptReference/>

       </ Scripts >

       < Services >

         < asp:ServiceReference  />

       </ Services >

</ asp:ScriptManager >

ScriptManager 属性和方法如下:

属性/方法
描述
AllowCustomError
和Web.config中的自定义错误配置区<customErrors>相联系,是否使用它,默认值为true
AsyncPostBackErrorMessage
异步回传发生错误时的自定义提示错误信息,
AsyncPostBackTimeout
异步回传时超时限制,默认值为90,单位为秒
EnablePartialRendering
是否支持页面的局部更新,默认值为True,一般不需要修改
ScriptMode
指定ScriptManager发送到客户端的脚本的模式,有四种模式:Auto,Inherit,Debug,Release,默认值为Auto,后面会仔细说到。
ScriptPath
设置所有的脚本块的根目录,作为全局属性,包括自定义的脚本块或者引用第三方的脚本块。如果在Scripts中的<asp:ScriptReference/>标签中设置了Path属性,它将覆盖该属性。
OnAsyncPostBackError
异步回传发生异常时的服务端处理函数,在这里可以捕获一场信息并作相应的处理。
OnResolveScriptReference
指定ResolveScriptReference事件的服务器端处理函数,在该函数中可以修改某一条脚本的相关信息如路径、版本等。
 
二.一个简单的示例
这个例子其实是UpdatePanel示例,在页面中加入了日期控件和一个下拉框,根据下拉框选择的不同,日期控件背景变为不同的颜色。示例代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<script runat="server">

    void DropDownSelection_Change(Object sender, EventArgs e)

    {

        Calendar1.DayStyle.BackColor =

            System.Drawing.Color.FromName(ColorList.SelectedItem.Value);

    }

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

    <title>ScriptManager Example</title>

</head>

<body>

    <form id="form1" runat="server">

        <div>

            <asp:ScriptManager ID="ScriptManager1" 

                               runat="server">

            </asp:ScriptManager>

            <asp:UpdatePanel ID="UpdatePanel1"

                             runat="server">

                <ContentTemplate>

                    <asp:Calendar ID="Calendar1" 

                                  ShowTitle="True"

                                  runat="server" />

                    <div>

                        Background:

                        <br />

                        <asp:DropDownList ID="ColorList" 

                                          AutoPostBack="True" 

                                          OnSelectedIndexChanged="DropDownSelection_Change"

                                          runat="server">

                            <asp:ListItem Selected="True" Value="White"> 

                            White </asp:ListItem>

                            <asp:ListItem Value="Silver"> 

                            Silver </asp:ListItem>

                            <asp:ListItem Value="DarkGray"> 

                            Dark Gray </asp:ListItem>

                            <asp:ListItem Value="Khaki"> 

                            Khaki </asp:ListItem>

                            <asp:ListItem Value="DarkKhaki"> D

                            ark Khaki </asp:ListItem>

                        </asp:DropDownList>

                    </div>

                </ContentTemplate>

            </asp:UpdatePanel>

            <br />

        </div>

    </form>

</body>

</html>

三.客户端脚本模式
在前面我们提到了ScriptMode属性指定ScriptManager发送到客户端的脚本的模式,它有四种模式:Auto,Inherit,Debug,Release,默认值为Auto。
1 .Auto:它会根据Web站点的Web.config配置文件来决定使用哪一种模式,只有当配置文件中retail属性设置为false: .Inherit:应该是通过程序设置ScriptMode的时候,等同于Auto?(不太了解)
< system .web >

   < deployment  retail ="false"  />

</ system.web >
或者页面中的Debug指令设为true的时候会使用Debug版本,其他的情况都会使用Release版本。
< %@ Page  Language ="C#"  Debug ="true"

AutoEventWireup ="true"  CodeFile ="Default.aspx.cs"  Inherits ="_Default"  % >
2
3 .Debug:客户端脚本使用Debug版本,除非retail属性设为true。
4 .Release:客户端脚本使用Release版本,除非retail属性设为false。
 
四.错误处理
在页面回传时如果发生了异常AsyncPostBackError事件将被触发,错误信息的处理依赖于AllowCustomErrors属性、AsyncPostBackErrorMessage属性和Web.config中的<customErrors>配置区。下面看一个简单的错误处理例子,在AsyncPostBackError事件中捕获到异常信息并设置AsyncPostBackErrorMessage属性。
<% @ Page Language="C#"  %>

< script  runat ="server" >

    protected void ErrorProcessClick_Handler(object sender, EventArgs e)

    {
        // This handler demonstrates an error condition. In this example

        // the server error gets intercepted on the client and an alert is shown. 

        throw new ArgumentException();
    }

    protected void SuccessProcessClick_Handler(object sender, EventArgs e)

    {
        // This handler demonstrates no server side exception.

        UpdatePanelMessage.Text = "The asynchronous postback completed successfully.";

    }

    protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)

    {
        ScriptManager1.AsyncPostBackErrorMessage = "异常信息为:" + e.Exception.Message;

    }

</ script >


< html  xmlns ="http://www.w3.org/1999/xhtml" >

< head  id ="Head1"  runat ="server" >

     < title > PageRequestManager endRequestEventArgs Example </ title >

     < style  type ="text/css" >

    body {}{

        font-family: Tahoma;

    }

    #AlertDiv{}{

    left: 40%; top: 40%;

    position: absolute; width: 200px;

    padding: 12px; 

    border: #000000 1px solid;

    background-color: white; 

    text-align: left;

    visibility: hidden;

    z-index: 99;

    }

    #AlertButtons{}{

    position: absolute;

    right: 5%;

    bottom: 5%;

    }

     </ style >

</ head >

< body  id ="bodytag" >

     < form  id ="form1"  runat ="server" >

         < div >

             < asp:ScriptManager  ID ="ScriptManager1"  runat ="server"  
            OnAsyncPostBackError ="ScriptManager1_AsyncPostBackError" >

             </ asp:ScriptManager >
 
             < script  type ="text/javascript"  language ="javascript" >

                var divElem = 'AlertDiv';

                var messageElem = 'AlertMessage';

                var errorMessageAdditional = 'Please try again.';

                var bodyTag = 'bodytag';
                Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

                function ToggleAlertDiv(visString)
                {
                     if (visString == 'hidden')

                     {
                         $get(bodyTag).style.backgroundColor = 'white';                         
                     }
                     else
                     {
                         $get(bodyTag).style.backgroundColor = 'gray';                         

                     }

                     var adiv = $get(divElem);

                     adiv.style.visibility = visString;

                }

                function ClearErrorState() {

                     $get(messageElem).innerHTML = '';

                     ToggleAlertDiv('hidden');                     

                }
                function EndRequestHandler(sender, args)

                {
                   if (args.get_error() != undefined && args.get_error().httpStatusCode == '500')
                   {

                       var errorMessage = args.get_error().message

                       args.set_errorHandled(true);

                       ToggleAlertDiv('visible');

                       $get(messageElem).innerHTML = '"' + 

                                errorMessage + '" ' + errorMessageAdditional;

                   }

                }

             </ script >

             < asp:UpdatePanel  runat ="Server"  UpdateMode ="Conditional"  ID ="UpdatePanel1" >

                 < ContentTemplate >

                     < asp:Panel  ID ="Panel1"  runat ="server"  GroupingText ="Update Panel" >

                         < asp:Label  ID ="UpdatePanelMessage"  runat ="server"  />

                         < br  />

                        Last update:

                         <% =  DateTime.Now.ToString()  %>

                        .

                         < br  />

                         < asp:Button  runat ="server"  ID ="Button1"  Text ="Submit Successful Async Postback"

                            OnClick ="SuccessProcessClick_Handler"  OnClientClick ="ClearErrorState()"  />

                         < asp:Button  runat ="server"  ID ="Button2"  Text ="Submit Async Postback With Error"

                            OnClick ="ErrorProcessClick_Handler"  OnClientClick ="ClearErrorState()"  />

                         < br  />

                     </ asp:Panel >

                 </ ContentTemplate >

             </ asp:UpdatePanel >

             < div  id ="AlertDiv" >

                 < div  id ="AlertMessage" >

                 </ div >

                 < br  />

                 < div  id ="AlertButtons"  >

                     < input  id ="OKButton"  type ="button"  value ="OK"  

                           runat ="server"  onclick ="ClearErrorState()"  />

                 </ div >

            </ div >

     </ form >

</ body >

</ html >
运行后时界面:
发生异常信息:
 
五.Services属性
Services 用来管理对WebService的调用,通过<asp:ServiceReference>标签可以在Services中注册一个WebService,在运行时ScriptManager将为每一个ServiceReference对象生成一个客户端代理,<asp:ServiceReference>标签一个很重要的属性是Path,用来指定WebService的路径,如下所示:
< asp:ScriptManager  ID ="SM1"  runat ="server" >

     < Services >

         < asp:ServiceReference  Path ="Service.asmx" />

     </ Services >

</ asp:ScriptManager >
看一个简单的调用WebService的例子:
WebService 如下,注意在WebServiceSample上加ScriptService特性: 页面:
[ScriptService]

public  class  WebServiceSample : System.Web.Services.WebService  {

    public WebServiceSample()

    {

        //Uncomment the following line if using designed components 

        //InitializeComponent(); 

    }


    [WebMethod]

    public string EchoString(String s)

    {
        return "Hello " + s;
    }

}
ASPX
<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3"  %>

< html  xmlns ="http://www.w3.org/1999/xhtml"  >

< head  runat ="server" >

     < title > Untitled Page </ title >

</ head >

< script  type ="text/javascript"  language ="JavaScript" >

    function OnbuttonGo_click() 

    {
        requestSimpleService = WebServiceSample.EchoString(

            document.getElementById('inputName').value,       //params

            OnRequestComplete    //Complete event

            );

        return false;
    }

    function OnRequestComplete(result) 

    {
        alert(result);
    }

</ script >

< body >

     < form  id ="form1"  runat ="server" >

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

         < Services >

             < asp:ServiceReference  Path ="WebServiceSample.asmx" />

         </ Services >

     </ asp:ScriptManager >

     < div >

         < input  type ="text"  id ="inputName"  size =20 />

         < input  id ="button"  type ="button"  value ="调 用"  onclick ="return OnbuttonGo_click()"  /></ div >

     </ form >

</ body >

</ html >
运行后效果如下:
当然了也可以在运行时动态的在Services中加入ServiceReference,下面看一个运行时动态加入ServiceReference的例子:
<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3"  %>

< script  runat ="server" >

    void Page_Load(object sender, EventArgs e)

    {

        ServiceReference sr = new ServiceReference();

        sr.Path = "WebServiceSample.asmx";

        ScriptManager1.Services.Add(sr);

    }

</ script >

< html  xmlns ="http://www.w3.org/1999/xhtml"  >

< head  runat ="server" >

     < title > Untitled Page </ title >

</ head >

< script  type ="text/javascript"  language ="JavaScript" >

    function OnbuttonGo_click() 

    {

        requestSimpleService = WebServiceSample.EchoString(

            document.getElementById('inputName').value,       //params

            OnRequestComplete    //Complete event

            );

        return false;

    }

 

    function OnRequestComplete(result) 

    {

        alert(result);

    }

</ script >

 

< body >

    

     < form  id ="form1"  runat ="server" >

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

     </ asp:ScriptManager >

     < div >

         < input  type ="text"  id ="inputName"  size =20 />

         < input  id ="button"  type ="button"  value ="调 用"  onclick ="return OnbuttonGo_click()"  /></ div >

     </ form >

</ body >

</ html >
可以看到运行后和在ScriptManager中直接加入的效果是一样的。
 
六.Scripts属性
关于Scripts属性到后面具体再说吧,最主要的属性有Path指定脚本的路径,ScriptMode指定客户端脚本的模式,它会覆盖ScriptManager中的ScriptMode属性,还有一个属性是IgnoreScriptPath,指定是否忽略掉ScriptManager中的ScriptPath属性。

scriptmanager相关推荐

  1. 服务器标记“asp:ScriptManager”不明确。

    转载的哦,解决了我遇到的问题了,好用~~~ 首先说下原先的情况,就是原本老项目的Web解决方案是使用.net framework 2.0的老版本, 所以机器也安装过Microsoft ASP.NET ...

  2. ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 区别

    ScriptManager.RegisterStartupScript方法 如果页面中不用Ajax,cs中运行某段js代码方式可以是: Page.ClientScript.RegisterStartu ...

  3. ScriptManager 帮助您实现 Web 应用程序的 AJAX 功能

    本文讨论: ScriptManager 在 ASP.NET AJAX 中的作用 ScriptManager 的隐式使用和显式使用 ASP.NET AJAX 对 Web 服务的支持 ASP.NET AJ ...

  4. 通过Ajax来简单的实现局部刷新(主要为C#中使用的UpdatePanel控件和ScriptManager控件)...

    1. ScriptManager和UpdatePanel控件联合使用可以实现页面局部异步刷新的效果.UpdatePanel用来设置页面中局部异步刷新的区域,它必须依赖于ScriptManager,因为 ...

  5. ScriptManager调用 无参数WebService

    在工程中添加一个 webservice 使用默认的 红色部分为后添加 为了要让ScriptManager识别这个WEBSERVICE WebService.cs using System; using ...

  6. 服务器控件的异步请求——UpdatePanel和ScriptManager

    aspx文件里面有以下一段代码 <body><form id="form1" runat="server"><div>< ...

  7. ScriptManager同时存在于两个dll中的问题

    错误 44 类型"System.Web.UI.ScriptManager"同时存在于 "c:\WINDOWS\assembly\GAC_MSIL\System.Web.E ...

  8. 关于scriptManager与JS代码兼容问题

    在后台代码中: ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "TimeInvalid", ...

  9. ScriptManager.RegisterAsyncPostBackControl 方法

    来源:VS2012帮助文档 用途: 将控件注册为异步回发的触发器 语法: public void RegisterAsyncPostBackControl(Control control ) 参数 c ...

  10. Page.ClientScript、ClientScript、ScriptManager、ClientScriptManager等的详细解说

    在 .aspx.cs页面中,输入这四个东西:Page.ClientScript.ClientScript.ScriptManager.ClientScriptManager,均会出提示,表示它们均可用 ...

最新文章

  1. oracle修改时区无效,Oracle 时区问题
  2. StackOverflow上面 7个最好的Java答案
  3. 常用的数据统计Sql 总结(转)
  4. Python环境出现模块找不到
  5. hdu2276 矩阵构造
  6. VS2005+WINDDK+Driver Studio 3.2编译出第一个测试驱动程序
  7. 修改SAP系统字段描述的方法
  8. boost::hana::remove_at_c用法的测试程序
  9. 删除msconfig启动项不打勾的东西
  10. git 创建 本地 裸 仓库
  11. InfoPath Resource Sites
  12. 自动驾驶论文解析(7)
  13. 2010-04-01 4over6tunnel配置——折腾了一天
  14. batchplot放到哪个文件夹_Batchplot使用技巧,转换CAD图纸格式并实现批量打印
  15. int f()与int f(void)的区别
  16. linux上samba+本地yum源最简单的配置
  17. 唐诗赏析html网页制作,【毕业论文】古诗词鉴赏网站的设计与实现.doc
  18. Java基础---整理1:JRE+进制+注释+关键字+标识符+变量
  19. 测试|模拟器Genymotion、Emulator、夜神配置选择
  20. python模拟登录qq邮箱爬取_python模拟登录qq邮箱

热门文章

  1. 2015 ACM Arabella Collegiate Programming Contest(F题)
  2. C语言中的有符号与无符号(挖坑)
  3. c语言零错误零警告,C语言 g警告:无符号表达式的比较0始终为false
  4. 谷歌学术+SCI-HUB一键下载SCI文献
  5. php上传文件失败的原因,PHP图片文件上传失败的原因
  6. 【数字图像处理】实验一 图像的平移,缩放和旋转(vs2017+opencv)
  7. AndroidPlayPlane战机小游戏
  8. 乱发短信的脉脉终于败诉了,网友:早就该判刑了
  9. 达人评测 i5 1135g7和i5 11300h的区别
  10. 适合学生写的请假管理系统