zoukankan      html  css  js  c++  java
  • ScriptManager(脚本控制器)

    资料中如实是说: 
          1, ScriptManager(脚本控制器)是asp.net ajax存在的基础.
          2, 一个页面只允许有一个ScriptManager,并且放在其他ajax控件的前面.
          3,ScriptManager掌管着客户端Ajax页的多有脚本,并在页面中注册Ajax类库,用来实现页面的局部更新和对Web服务的调用.
    下面是scriptManager的结构:


    下面介绍下ScriptManager的几个属性和一些子元素


       a, EnablePartialRendering: (默认局部渲染)比较重要,用来表示此页面是否允许局部刷新(默认为true)
       b, AllowCustomErrorsRedirect :当发生错误时候,是否导航到web.config中定义的错误页面,如果设置为false,则使用AsyncPostBackErrorMessage 和OnAsyncPostBackError提示错误.
       c, AsyncPostBackErrorMessage: 异步调用发生错误时的提示信息.
       d, OnAsyncPostBackError: 异步调用发生错误时的事件
       e, AsyncPostBackTimeOut: 异步调用的有效时间 默认为 90秒
       f, AuthenticationService: 用来表示提供验证服务的路径.
       g, ProfileService    表示提供个性化服务的路径
       h, Scripts    对脚本的调用,可以恰套多个ScriptReference摸板对多个脚本文件的调用
       i,  Service   对服务的调用 也可以恰套多个ServiceReference摸板以实现多个服务的引用


      下面简单介绍下上面属性的基本使用格式:


    调用脚本文件:


      脚本语言我们可以直接写在页面的<script></script> 元素内
    也可以使用注册方式在页面的head中
    <script type="text/javascript" src=""> <script>
    在ajax技术中也提供了一种注册方式,
    <asp:ScriptManager ID="ScriptManager" runat="server">
             <Scripts>

                     <asp:ScriptReference Path="" />       

             <Scripts>
    </asp:ScriptManager>  

    从<Scripts>来看,它可以多个js文件,如果单能实现这个功能觉得微软有点话蛇添足,它的主要用途是调用ajax中已经存在的Javascrtpt脚本文件.


    如:
    <asp:ScriptManager runat="server" ID="scriptManager">
         <Scripts>
             <asp:ScriptReference Assembly="Microsoft.Web.Preview" Name="PreviewScript.js"  />
             <ssp:ScriptReference Assembly="Microsoft.Web.Preview" Name="PreviewDragDrop.js />
    </asp:ScriptManager>


    调用Web Service


    ScriptManager的主要作用就是在客户端 调用一些服务器的代码,比较常用的就是将web service注册在客户端,从而可以用javascript脚本中实现对web service的调用


    下面使用俩个例子说明对web service中方法的调用:
    页面代码:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>无标题页</title>

    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <input type="text" id="txtName" />
        <input type="button" value="带参数的web service方法调用" onclick="ReferencSercviceMethod2()" />
        <input type="button" value="不带参数的web service方法调用" onclick="ReferenceServiceMethod1()" />
        </div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
        <asp:ServiceReference Path="WebServiceTest.asmx" />
        </Services>
        <Scripts>
        <asp:ScriptReference Path="Script/JScript.js" />
        </Scripts>
        </asp:ScriptManager>
        </form>
    </body>
    </html>


    js代码:
    function ReferenceServiceMethod1(){
        WebServiceTest.HelloWorld(GetResult);
    }
    function GetResult(result){
        alert(result);
    }

    function ReferencSercviceMethod2(){
    WebServiceTest.SayHelloWorld(document.getElementById("txtName").value,GetResult);
    }

    web service代码:
    using System;
    using System.Collections;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;

    /// <summary>
    ///WebServiceTest 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    //这句一定要加上
    [System.Web.Script.Services.ScriptService]
    public class WebServiceTest : System.Web.Services.WebService {

        public WebServiceTest () {

            //如果使用设计的组件,请取消注释以下行 
            //InitializeComponent(); 
        }

        [WebMethod]
        public string HelloWorld() {
            return "Hello World";
        }
        [WebMethod]
        public string SayHelloWorld(string name)
        {
            return "Hello World " + name;
        }
        
        
    }


    下面简单介绍下用scriptManager的动态注册一个web service


    可以删除掉上面页面代码中<Services></Services>段


    在page的代码的load事件中加入下面代码:


        protected void Page_Load(object sender, EventArgs e)
        {
            ServiceReference service = new ServiceReference("WebServiceTest.asmx");
            ScriptManager1.Services.Add(service);
        }


    OnAsyncPostBackError的使用


    在scriptManager中可以捕获局部更新失败的错误,OnAsyncPostError表示当回发处理发生错误时的事件
    AsyncPostBackMessage表示发生错误时的提示信息。
    页面代码:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>无标题页</title>

    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" 
            onasyncpostbackerror="ScriptManager1_AsyncPostBackError">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Button ID="Button1" runat="server" Text="触发错误按钮" onclick="Button1_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
        </form>
    </body>
    </html>


    cs文件代码:
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                (int.Parse("") + 1).ToString();
            }
            catch ( Exception  ex)
            {
                ex.Data["ExtraInfo"] = "类型转换错误!";
                throw ex;
            }
        }

        protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
        {
            if (e.Exception.Data["ExtraInfo"] != null)
            {
                ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message + "---注意";
            }
            else
            {
                ScriptManager1.AsyncPostBackErrorMessage = "其他原因导致运行失败";
            }
        }
    }

  • 相关阅读:
    java--堆栈
    git 修改默认编辑器
    java 二维数组的行列长度
    公钥私钥
    手机是如何定位的
    Git和svn的区别
    面试未解之谜
    删除单链表中重复元素
    深入分析事务的隔离级别
    传送
  • 原文地址:https://www.cnblogs.com/yanyao/p/5009941.html
Copyright © 2011-2022 走看看