ScriptManager的简单用法

来源:互联网 发布:unity3d与arduino交互 编辑:程序博客网 时间:2024/06/05 20:43
资料中如实是说:
      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中方法的调用:
页面代码:
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5.     <title>无标题页</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <div>
  10.     <input type="text" id="txtName" />
  11.     <input type="button" value="带参数的web service方法调用" onclick="ReferencSercviceMethod2()" />
  12.     <input type="button" value="不带参数的web service方法调用" onclick="ReferenceServiceMethod1()" />
  13.     </div>
  14.     <asp:ScriptManager ID="ScriptManager1" runat="server">
  15.     <Services>
  16.     <asp:ServiceReference Path="WebServiceTest.asmx" />
  17.     </Services>
  18.     <Scripts>
  19.     <asp:ScriptReference Path="Script/JScript.js" />
  20.     </Scripts>
  21.     </asp:ScriptManager>
  22.     </form>
  23. </body>
  24. </html>
js代码:
  1. function ReferenceServiceMethod1(){
  2.     WebServiceTest.HelloWorld(GetResult);
  3. }
  4. function GetResult(result){
  5.     alert(result);
  6. }
  7. function ReferencSercviceMethod2(){
  8. WebServiceTest.SayHelloWorld(document.getElementById("txtName").value,GetResult);
  9. }

web service代码:
  1. using System;
  2. using System.Collections;
  3. using System.Web;
  4. using System.Web.Services;
  5. using System.Web.Services.Protocols;
  6. /// <summary>
  7. ///WebServiceTest 的摘要说明
  8. /// </summary>
  9. [WebService(Namespace = "http://tempuri.org/")]
  10. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  11. //这句一定要加上
  12. [System.Web.Script.Services.ScriptService]
  13. public class WebServiceTest : System.Web.Services.WebService {
  14.     public WebServiceTest () {
  15.         //如果使用设计的组件,请取消注释以下行 
  16.         //InitializeComponent(); 
  17.     }
  18.     [WebMethod]
  19.     public string HelloWorld() {
  20.         return "Hello World";
  21.     }
  22.     [WebMethod]
  23.     public string SayHelloWorld(string name)
  24.     {
  25.         return "Hello World " + name;
  26.     }
  27.     
  28.     
  29. }
下面简单介绍下用scriptManager的动态注册一个web service

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

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

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

OnAsyncPostBackError的使用

在scriptManager中可以捕获局部更新失败的错误,OnAsyncPostError表示当回发处理发生错误时的事件
AsyncPostBackMessage表示发生错误时的提示信息。
页面代码:
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5.     <title>无标题页</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <asp:ScriptManager ID="ScriptManager1" runat="server" 
  10.         onasyncpostbackerror="ScriptManager1_AsyncPostBackError">
  11.     </asp:ScriptManager>
  12.     <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  13.         <ContentTemplate>
  14.             <asp:Button ID="Button1" runat="server" Text="触发错误按钮" onclick="Button1_Click" />
  15.         </ContentTemplate>
  16.     </asp:UpdatePanel>
  17.     </form>
  18. </body>
  19. </html>
cs文件代码:
  1. using System;
  2. using System.Collections;
  3. using System.Configuration;
  4. using System.Data;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.HtmlControls;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.WebControls.WebParts;
  11. public partial class _Default : System.Web.UI.Page
  12. {
  13.     protected void Page_Load(object sender, EventArgs e)
  14.     {
  15.     }
  16.     protected void Button1_Click(object sender, EventArgs e)
  17.     {
  18.         try
  19.         {
  20.             (int.Parse("") + 1).ToString();
  21.         }
  22.         catch ( Exception  ex)
  23.         {
  24.             ex.Data["ExtraInfo"] = "类型转换错误!";
  25.             throw ex;
  26.         }
  27.     }
  28.     protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
  29.     {
  30.         if (e.Exception.Data["ExtraInfo"] != null)
  31.         {
  32.             ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message + "---注意";
  33.         }
  34.         else
  35.         {
  36.             ScriptManager1.AsyncPostBackErrorMessage = "其他原因导致运行失败";
  37.         }
  38.     }
  39. }
现介绍到这里,回头用到其他属性的时候继续补充上,欢迎指教~

原创粉丝点击