这一讲的内容主要是把以前课程的ScriptManager的使用统一归纳起来
首先我们看看ScriptManager的静态方法。
static void RegisterArrayDeclaration | 注册一个Array对象,可在页面上注册,或在控件上注册 |
static void RegisterClientScriptBlock | 注册一个客户端脚本,这个脚本将会被执行。 |
static void RegisterClientScriptInclude | 注册一个客户端脚本包含。 |
static void RegisterClientScriptResource | 使用类型和资源名注册客户端脚本资源。 |
static void RegisterExpandoAttribute | 将名称/值对注册为指定控件的自定义 (expando) 属性,也就是说可以向客户端的Html控件注册自己的属性键值 |
static void RegisterHiddenField | 注册一个隐藏域控件 |
static void RegisterOnSubmitStatement | 注册OnSubmit 语句,该语句在页面提交前执行并提供取消提交的机会 |
static void RegisterStartupScript | 注册启动脚本,在页面读取完成后执行注册的脚本 |
ScriptManager的属性和非静态方法
void RegisterDataItem | 在服务器端给一个UpdatePanel注册一个DataItem,在客户端可以根据UpdatePanel的ClientID通过get_DataItems属性得到注册的数据。说白了就是通过这个方法将数据从服务段传递到客户端。 |
void SetFocus | 在ScriptManager中每次异步刷新后不是使用的原来的控件,而是新生成的控件,会导致控件丢失焦点,通过SetFocus方法设置控件焦点。 |
void RegisterAsyncPostBackControl | 注册一个触发异步传输的控件。 |
void RegisterPostBackControl | 注册一个触发普通传输的控件。 |
bool AllowCustomErrorsRedirect | 是否使用配置文件Web.Config中的customErrors元素。 |
string AsyncPostBackErrorMessage | 设置或得到异步回传发生错误时的错误信息 |
int AsyncPostBackTimeout | 设置或得到异步回传的超时时间 |
string AsyncPostBackSourceElementID | 引起异步回发的控件的ID属性值 |
bool IsInAsyncPostBack | 得到一个bool值,判断此次传输是否是异步传输 |
ScriptManager功能控制成员
static ScriptManager GetCurrent | 得到当前页面的ScriptManager |
bool EnablePageMethods | 设置/得到是否允许页面方法被客户端调用。 |
bool EnablePartialRendering | 表示是否支持页面局部更新。如果是 false,我们在应用 UpdatePanel 时将会出现闪烁现象,也就是说 Ajax 效果没有起作用。 |
bool EnableScriptGlobalization | 是否使用全球化支持 |
bool EnableScriptLocalization | 是否使用本地化支持 |
IsDebuggingEnabled | 判断调试模式是否打开。调试模式和发布模式使用的Ajax的js文件不一样,发布模式的内容更小。 |
bool SupportsPartialRendering | 用来判断当前的浏览器是否支持Ajax的局部更新功能,我们可以通过判断该属性来决定是在页面中启用Ajax,还是按照传统的方式进行整页回送 |
AuthenticationServiceManager AuthenticationService | 在服务器端动态得到AuthenticationService |
ProfileServiceManager ProfileService | 在服务器端动态得到ProfileService。 |
ScriptReferenceCollection Scripts | 在服务器端动态得到读取的js脚本。 |
ServiceReferenceCollection Services | 在服务器端动态得到引入的WebService。 |
ScriptManage脚本空间支持成员
void RegisterDispose | 可在注册客户端组件时作为可释放对象进行调用。这意味着组件需要将相关的 DOM 元素与 UpdatePanel 控件放在一起使用 |
void RegisterExtenderControl | 用当前的ScriptManager注册一个扩展控件,此方法用户控件开发。 |
void RegisterScriptControl | 用当前的ScriptManager注册一个脚本控件,此方法用户控件开发。 |
void RegisterScriptDescriptors | 注册脚本的描述信息。 |
ScriptMode的值
- 控制脚本类型(debug、release)
- Auto & Inherit,Auto的作用是Web页面自动根据当前的编译模式以及Web.config中的相关设置决定应用脚本的Debug版本还是Release版本。Inherit主要是ScriptReference 标签使用,表示继承ScriptManager中的全局设置。是 标签的ScriptMode属性设置为Auto,那么当引用的是程序集中内嵌的脚本资源(使用Assembly和Name属性)时,等同于设置为Release;而当引用的是一个单独的脚本文件(使用Path属性)时,等同于Inherit。
ScriptPath:
- 定义了一个脚本加载的基础路径(起始根目录、全局路径),我们可以将这些内嵌到程序集中的资源文件抽取出来并放置于该目录下,让页面引用这个静态文件,以提高程序执行的效率。
- 仅对程序集中的脚本有效
- %ScriptPath%/%AssemblyVersion%/%DotNetVersion%/%Name%.js
- 若是 标签中不是使用Assembly和Name,而是使用Path属性直接引用了某个脚本文件,则设定于ScriptManager控件中的ScriptPath将不会起到任何作用。
ScriptReference的LoadScriptsBeforeUI属性。
当页面加载的时候碰到脚本时,页面的呈现将会暂停下来去读取脚本,也就是说脚本加载会阻塞页面内容呈现。默认情况下ScriptReference会在页面内容前引入,但是把LoadScriptsBeforeUI设为False则会把ScriptReference放在页面末尾加载。就算LoadScriptBeforeUI设为false,window.onload时间仍然时会在脚本读取完毕之后执行。注意,当我们设置LoadScriptBeforeUI为false时,要注意页面上的操作可能会调用脚本,但是这时脚本没有加载完毕,此时需要一些容错机制。