快捷搜索:

ClientScriptManager 类动态创建 JavaScript 详解

其其实很多环境下都必须在页面中动态的天生 JavaScript ,

比如弹出一个页面对话框,或者返回一个页面语句,

有可能同伙会说直接应用

Response.Write(“alert(‘你好!!!’)”);

就OK了,事实上,并非如斯,比如在应用 ASP.NET AJAX 框架进行 AJAX 开拓时,

应用上面的语句便有可能使全部页面加载掉败,或者使全部页面的结构乱套,

而在 ASP.NET 中,要在页面上以 C# 法度榜样代码的要领动态添加 JavaScript 代码,

事实上照样对照简单的,这主要要归功于 ClientScriptManager 类,

经由过程应用这个类的如下四个基础措施,可以实现动态的在页面中创建 JavaScript 代码,

措施一:RegisterClientScriptBlock

措施二:RegisterClientScriptInclude

措施三:RegisterStartupScript

措施四:RegisterOnSubmitStatement

经由过程这四个措施基础上便可以实现动态创建 JavaScript 了。

首先是 RegisterClientScriptBlock 措施:

这个措檀越如果在页面中动态添加一些对照基础的 JavaScript 代码,

添加的这些代码可以写成函数,然后可以实现多次调用,和通俗的 JavaScript 基础类似。

比如实现简单的谋略器,或者实现简单的算法问题,均是采纳这种要领进行注册。

然后是 RegisterClientScriptInclude 措施:

这个措施和 RegisterClientScriptBlock 功能基真相同,

独一的差别便是应用这个措施时引用的 JavaScript 是从外部引用的 .js 文件进行动态注册,

而 RegisterClientScriptBlock则是应用 string

或者应用 System.Text.StringBuilder 来进行拼接字符串,

然后再对这个拼接起来的字符串实现注册。

再便是 RegisterStartupScript 措施:

这个措施呢,又有一些不合,

这个措施一样平常来说只是对付只要履行一次的 JavaScript 语句进行注册,

比如在某处弹出一个差错或者提醒对话框之类的,仅仅是单条或者多条,

且只需履行一次的语句。

着末就是 RegisterOnSubmitStatement 措施了:

这个措施呢,对照特殊,

由于它注册的 JavaScript 代码只有在全部页面要进行回发时才会履行,

也便是当应用这个措施注册的 JavaScript 代码将会在页面回发的时刻履行,

以是假如如果想取消页面回发的话,可以应用这个措施定义 JavaScript 语句,

比如 return confirm(“确认要提交页面?”);

四种措施除了 RegisterClientScriptInclude 外,

其他三种应用的 JavaScript 代码都是经由过程拼接的形式天生,

只有 RegisterClientScriptInclude 是引用外部的现成的 .js 文件

还有必然要提醒的便是,

当应用四种措施中的同一种注册多个 JavaScript 代码段时,

在履行时,有可能不会按照您注册的顺序先后履行,而是乱序履行的,

要想要先后顺序履行,

那么可以将所有的 JavaScript 代码段按顺序写在同一个代码段中同时注册,

以上就是四种措施的先容了,

接下来便要顺便先容和上面四个相对应的几个措施,

因为在注册一段 JavaScript 代码时,是根据类型和 key 来进行区分的,

而类型主如果区分多个页面之间的 JavaScript 代码段,

而 key 则是区分同一个页面中的 JavaScript 代码段,

以是在对一段 JavaScript 代码进行注册时,

必须先判断将要注册的类型和键值是否已经被注册,

以是有下面的四种对应措施来进行判断

RegisterClientScriptBlock -------- IsClientScriptBlockRegistered (Type,Key)

RegisterClientScriptInclude -------- IsClientScriptIncludeRegistered (Type,Key)

RegisterStartupScript -------- IsStartupScriptRefistered (Type,Key)

RegisterOnSubmitStatement -------- IsOnSubmitStatementRegisterd (Type,Key)

接下来便看一个实例吧:

相对付的 HTML ,此中无任何 JavaScript 代码,

也并没有在任何控件中添加任何的客户端事故

姓名

伴跟着姓名上字符的输入,会应用 JavaScript 自动谋略出输入的字符数并且显示,

这个是应用 RegisterClientScriptBlock 实现的 JavaScript 的注册

对付输入的年岁,也会应用 JavaScript 判断是否在 15—35 之间,

每当 txtAge 掉去焦点便会调用应用 RegisterClientScritpInclude

进行注册的 JavaScript 代码进行验证

着末便是提交网页时也会弹出一个对话框,扣问用户是否确认提交页面

这个是应用 RegisterOnSubmitStatement 注册的 JavaScript 实现的

详细的代码实现

Type myType;

ClientScriptManager myScriptManager;

protected void Page_Load(object sender, EventArgs e)

{

myType = this.GetType();

myScriptManager = Page.ClientScript;

StringBuilder strBuilder = new StringBuilder();

strBuilder.Append("function GetNameCount(name) {");

strBuilder.Append("var lblMsg = document.getElementById('lblMsg');");

strBuilder.Append("lblMsg.innerText = name.length;");

strBuilder.Append("}");

string jsStrStartUp = "alert('迎接大年夜家来到 BaoBeiMe 的小我博客');";

string jsStrOnSubmit = "alert('你正在履行提交页面的历程');" +

"return confirm('确认要提交全部页面?')";

string keyBlock = "Block";

string keyStartUp = "StartUp";

string keyOnSubmit = "OnSubmit";

string keyInclude = "Include";

if (!myScriptManager.IsStartupScriptRegistered(myType, keyStartUp))

{

myScriptManager.RegisterStartupScript(myType, keyStartUp, jsStrStartUp, true);

}

if (!myScriptManager.IsClientScriptBlockRegistered(myType, keyBlock))

{

myScriptManager.RegisterClientScriptBlock(myType,

keyBlock, strBuilder.ToString(), true);

}

txtName.Attributes.Add("onkeyup", "GetNameCount(this.value)");

if (!myScriptManager.IsOnSubmitStatementRegistered(myType, keyOnSubmit))

{

myScriptManager.RegisterOnSubmitStatement(myType,

keyOnSubmit, jsStrOnSubmit);

}

if (!myScriptManager.IsClientScriptIncludeRegistered(myType, keyInclude))

{

myScriptManager.RegisterClientScriptInclude(myType,

keyInclude,ResolveClientUrl("~/JavaScript/ForThree_2.js"));

}

txtAge.Attributes.Add("onblur", "CheckAge(this.value)");

}

引用的 JavaScript 文件

function CheckAge(age) {

if (age35) {

alert("不再年岁范围内");

}

}

您可能还会对下面的文章感兴趣: