ASP.NET AJAX(11)__ScriptManagerUpdatePanel的支持成员功能控制成员脚本控件支持成员ScriptMode和ScriptPathLoadScriptsBeforeU
ScriptManager的作用,这个不言而喻,它是整个的ASP.NET AJAX的核心
UpdatePanel的支持成员
- static void RegisterArrayDeclaration
- static void RegisterClientScriptBlock
- static void RegisterScriptInclude
- static void RegisterClientScriptResource
- static void RegisterExpandoAttribute
- static void RegisterHiddenField
- static void RegisterOnSubmitStatement
- static void RegisterStartupScript
- 以上这些方法的功能,我在前面一篇写专门写Updatepanel是写过的,这里就不在重复啦
- void RegisterDataItem
- void SetFocus//设置焦点
- void RegisterAsyncPostBackControl
- void RegisterPostBackControl
- bool AllowCustomErrorsRedirect{get;set}//默认出现错误后跳转
- string AsyncPostBackErrorMessage{get;set;}//设置异步回送的错误信息
- int AsyncPostBackTimeout{get;set}
- string AsnycPostBackSourceElementID{get;}//异步回送由谁发起
- bool IsInAsyncPostBack{get;}//是否在异步回送过程中
功能控制成员
- static ScriptManager GetCurrent//获得页面中的ScriptManager
- bool EnablePageMethods{get;set;}//是否支持aspx页面方法
- bool EnablePartialRendering{get;set;}//默认为true,是否使用UpdatePanel,如果不使用,强烈建立设置为false
- bool EnableScriptGlobalization{get;set;}//是否支持全球化
- bool EnableScriptLocalization{get;set}//本地化
- is DebuggingEnabled{get;}//运行模式,发布模式或者调式模式,调试模式加载的脚本有格式注释等,相对要大很多
- bool SupportsPartialRendering{get;set}//是否可以使用UpdatePanel
- AutnecticationServiceManager AuthenticationService {get;}
- ProfileServiceManager ProfileService{get;}
- ScriptReferenceCollection Scripts{get;}
- ServiceReferenctCollection Services{get;}
脚本控件支持成员
- void RegisterDispose
- void RegisterExtenderControl
- void RegisterScriptControl
- void RegisterScriptDescriptors
ScriptMode和ScriptPath
- ScriptMode(发布模式,调试模式)设置为Auto,则自动判断
- ScriptPath__定义一个脚本加载的基础路径,仅对程序集中的脚本有效
一个关于ScriptMode和ScriptPath的示例
创建一个名为SimpleAjaxService.asmx的WebService,代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
/// <summary>
///SimpleAjaxService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
public class SimpleAjaxService : System.Web.Services.WebService
{
Random random = new Random(DateTime.Now.Millisecond);
[WebMethod]
public string GetRandomString(int min, int max, string prefix)
{
return prefix + random.Next(min, max);
}
}
在页面中引入这个WebService,有两种方法,
一种是在页面添加ScriptManager,Load事件中添加如下代码
ServiceReference serviceRef = new ServiceReference("SimpleAjaxService.asmx");
ScriptManager.GetCurrent(this).Services.Add(serviceRef);
另外一种方式是,在前台代码中添加如下代码
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/Demo10/SimpleAjaxService.asmx" />
</Services>
</asp:ScriptManager>
在页面中添加如下代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ScriptModeAndPath.aspx.cs" Inherits="Demo10_ScriptModeAndPath" %>
<!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>
<script language="javascript" type="text/javascript">
function getRandomString() {
SimpleAjaxService.GetRandomString(0, 100, "Hello_", onSucceeded);
}
function onSucceeded(result) {
alert(result);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/Demo10/SimpleAjaxService.asmx" />
</Services>
</asp:ScriptManager>
<input type="button" value="Get Random String" onclick="getRandomString()" />
</form>
</body>
</html>
这里不用多解释,前面有一讲“客户端调用WebService”已经讲的很多啦
这时,我们在使用HttpWatch观察它加载的内容的时候,就会发现有很多带着注释和格式的js代码,因为这时,我们的项目是在debug模式下运行的,
我们做如下修改
在web.config中找到system.web节点下的compilation,设置其<compilation debug="false">,这样我们的项目就出于一个发布模式,我们再次刷新页面,观察它引入的脚本文件,就是没有格式和代码注释,并且经过混淆的代码,对比引入文件的大小,回发下在发布模式下引入的代码小了很多很多,
还有一种方式,就是改变页面中的ScriptManager的ScriptMode,区别就是在web.config中配置,它是全局的,在页面中的ScriptManager设置,它是局限于当前页面的,ScriptManager默认是Auto,等于web.config中的配置
在ScriptManager中,除了可以引入Service,还可以引入Scripts,方式如下
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release">
<Services>
<asp:ServiceReference Path="~/Demo10/SimpleAjaxService.asmx" />
</Services>
<Scripts>
<asp:ScriptReference Path="~/Demo10/SomeScript.js" />
</Scripts>
</asp:ScriptManager>
除了可以引入js文件,我们还可以引入程序集中的Resource,方式如下
<asp:ScriptReference Name="Menu.js" Assembly="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" ScriptMode="Debug" />
这,需要提供它的两个属性,资源名和一个完整的命名
SriptManager还可以配置一个ScriptPath,可以配置一个目录,系统将会把这个路径当作一个基础路径去寻找js文件
LoadScriptsBeforeUI
- 脚本加载将会阻塞页面内容的呈现
- 默认情况下ScriptReferenct会在页面内容前引入
- 如果把LoadScriptsBeforeUI设置为false,则会把ScriptReference放在页面末尾加载
- window.onload事件的触发不受影响
一个示例
创建一个名为TimeConsumingScript.ashx的一般处理程序
using System;
using System.Web;
using System.Threading;
public class TimeConsumingScript : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.Write("// script code here");
Thread.Sleep(2000);
}
public bool IsReusable
{
get
{
return false;
}
}
}
然后创建一个aspx页面
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LoadScriptBeforeUI.aspx.cs" Inherits="Demo10_LoadScriptBeforeUI" %>
<!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>
<script language="javascript" type="text/javascript">
var startLoading = new Date();//页面开始加载的时间
function pageLoad() {
alert("Page loaded in " + (new Date() - startLoading) + " ms");
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/Demo10/TimeConsumingScript.ashx" />
</Scripts>
</asp:ScriptManager>
UI Loaded in
<script language="javascript" type="text/javascript">
document.write(new Date() - startLoading);//当前时间减去开始加载的事件
</script>
ms.
</form>
</body>
</html>
我们发现,页面上显示了我们加载页面使用了两秒多一点的事件,因为我们在那个一般处理程序中,线程停止了两秒钟
我们对ScriptManager做如下处理
<asp:ScriptManager ID="ScriptManager1" runat="server" LoadScriptsBeforeUI="false">
<Scripts>
<asp:ScriptReference Path="~/Demo10/TimeConsumingScript.ashx" />
</Scripts>
</asp:ScriptManager>
我们把他的LoadScriptBeforeUI设置为false,再刷新页面,发现页面中显示的加载时间显示的很少,这时我们打开页面源代码,可以看到,脚本被加载到了页面代码的尾部,在form结束之前,同时我们看到,windows.onload事件,仍然是在页面全部加载完以后才被调用的
注意:如果我们在设计的时候,用户会在页面刚接在的时候,做一些操作,会调用我们加载的Script,则如果我们设置了LoadScriptBeforeUI设置为false,则会产生一些错误
- C++之new/delete/malloc/free详解
- 验证 结构体指针与自增运算符
- Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失下篇
- ONOS1.3.0集群实验
- Spring Boot下的TDD(测试驱动开发)
- MySQL的索引是什么?怎么优化?
- C语言之函数
- ElasticSearch搜索引擎在SpringBoot中的实践
- 消费者驱动的微服务契约测试套件Spring Cloud Contract
- 使用Spring Boot开发一个Spring Mobile程序
- Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失
- 内网穿透工具-ittun
- Elastic-Job-Spring-Boot-Starter简化你的任务配置
- Spring Boot处理REST API错误的正确姿势
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- jQuery 属性操作
- 方老师聊Nginx知识点
- 《Java从入门到失业》第五章:继承与多态(5.1-5.7):继承
- 【赵渝强老师】Flink的DataSet算子
- Node.js 案发现场揭秘 —— 文件句柄泄露导致进程假死
- nacos配置问题
- Chevereto 配合 Picgo 打造个人相册/图床解决方案
- 从提高 Elasticsearch 搜索体验说开去......
- 又一个奇葩要求,Python是如何将“中文”转“拼音”的?
- localStorage中怎么存对象?
- vue中sessionStorage的使用
- 别再问我 Python 怎么识别数字验证码了!
- Java 多线程设计模式 —— Single Threaded Execution
- SAP Spartacus默认的baseSite是从源代码什么地方读取的
- SAP Spartacus CmsPage的加载逻辑