当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 使用JScript.NET创建asp.net页面

ASP.NET
Asp.net利用JQuery弹出层加载数据代码
asp.net dataview做无限极分类的又一用法
asp.net ckeditor编辑器的使用方法
告别ADO.NET实现应用系统无缝切换的烦恼(总结篇)
asp.net 实现动态显示当前时间(不用javascript不考虑开销)
.net动态显示当前时间(客户端javascript)
asp.net 结合YUI 3.0小示例
asp.net 取消缓存相关问题说明
asp.net 计划任务管理程序实现,多线程任务加载
ASP.NET 跨页面传值方法
asp.net中url地址传送中文参数时的两种解决方案
Asp.net 菜单控件简洁版
asp.net jQuery Ajax用户登录功能的实现
asp.net SharpZipLib的压缩与解压问题
asp.net url重写后页面回传问题
asp.net与Discuz!NT整合集成实例教程
Discuz!NT 3与asp.net 整合的实例教程
测试控制台使用方法
.net 动态标题实现方法
asp.net *.ashx类型的文件使用说明

ASP.NET 中的 使用JScript.NET创建asp.net页面


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 87 ::
收藏到网摘: n/a

大家一定习惯于使用vb.net和C#来创建asp.net页面,但是不知大家知不知道我们还可以使用Jscript.net编写asp.net.
这可能是自微软1996年推出基于IE3.0的Jscript1.0以来在功能上最大的飞跃。JScript传统上被用作开发客户端脚本。在internet上它普遍存在,特别是在Activeseverpage(ASP)中。
当脚本变得很大的时候,程序员需要编写更有效的代码;并且程序变得越来越复杂,程序员往往受到Jscript的局限性。
如果你对Jscript很熟悉的话,你将很快的在.net平台上使用Jscript.net,应为Jscript.net就像是Jscript的升级版,而不是一门新的语言。
Jscript.net最新的特性是Jscript.net是真正的编译语言。这使它完全可以与vb.net和C#相媲美。从语法方面,Jscript.net改善了变量类型的定义,不但支持明确的变量类型定义,还支持模糊的变量类型定义。模糊定义是一项激动人心的技术,它可以分析你脚本中使用的变量,并且推断出变量的类型。这就意味着你可以使用未定义的变量并以更快的速度执行。
请参照下面的例子:
functiontest()
{
for(varx=0;x<100;x++)
{
print(x);
}
}
当Jscript.net编译这个程序的时候,它分析变量X的用途并确定变量X只用做数值型,结果变量被安全的定义为数值型。技术进步在于把变量定义为数值型要明显优于把变量定义为genericObject或variant。
为了实现Jscript.net的推断变量类型的功能,你需要遵守以下几条规则!
一.永远声明你的局部变量。这看起来像是显而易见的,但是这是非常重要的,Jscript.net只能推断你的局部变量,而不是全局变量。如果你没有声明它,直接使用,它就将成为全局变量,将不能被优化。
二.仅使用一种数据类型,如果你声明一个数值型变量,却用来储存字符型的数据,Jscript将把该变量定义为genericObject或variant。
//无法推断类型--glob是一个全局变量
varglob=42;
functionmyfunc()
{
//无法推断类型--s没有定义因此它被当作全局变量
s="hello";
//可以推断类型
vari=0;
//无法推断类型—q被指派成其他的类型
varq=newDate();
q=3.14159;
}
尽管类型推断是非常好的功能,但是它还是有一定的缺点的。它无法帮助我们捕获类型不匹配或其他的错误。为了解决这个问题,Jscript.net提供一种方法明确定义变量的类型。通过例子,你将很容易的了解它的使用方法。
//定义数值类型
varmyInt:int=42;
//定义一个函数,返回一个字符串
functionGetName():String
{
//程序行
}
//定义一个带两个参数的函数返回一个逻辑类型
functionCheckNumber(dVal:double):Boolean
{
//functioncode
}
下面给出一个完成的函数,仔细的体会一下。
functiongetConditions(strCity:String):String
{
varnow:Date=newDate();
switch(strCity.toUpperCase())
{
case"LONDON":
if(now.getMonth()<=7||now.getMonth()>=9)
{
return"overcast";
}
else
{
return"partlyovercastandhumid";
}
break;
case"SEATTLE":
if(now.getMonth()==7&&now.getDay()==4)
{
return"torrentialrain";
}
else
{
return"rain";
}
break;
case"LA":
return"smoggy";
break;
case"PHOENIX":
return"damnhot";
break;
default:
return"partlycloudywithachanceofshowers";
}
}
使用Jscript.net,你也可以定义其他.net架构的类型,通过引用命名空间和派生类可以向Jscript.net引入新的数据类型。这样在两者的数据类型中就有可能产生重叠。参见下表:
Boolean.NETFrameworkBoolean/JScriptboolean
Number.NETFrameworkDouble/JScriptnumber
String.NETFrameworkString/JScriptstring
Int.NETFrameworkInt32
Long.NETFrameworkInt64
Float.NETFrameworkSingle
Double.NETFrameworkDouble
Object.NETFrameworkObject/JScriptObject
DateJScriptDateobject
ArrayJScriptArray
FunctionJScriptFunctionobject
在Jscript中定义类通过类声明,包含方法和对象和var声明。对于类的派生通过下面两个程序的对比,你讲清楚地明白。
JScript5.5Code
//Simpleobjectwithnomethods
functionCar(make,color,year)
{
this.make=make;
this.color=color;
this.year=year;
}
functionCar.prototype.GetDescription()
{
returnthis.year+""+this.color+""+this.make;
}
//CreateanduseanewCarobject
varmyCar=newCar("Accord","Maroon",1984);
print(myCar.GetDescription());
JScript.NETCode
//Wrapthefunctioninsideaclassstatement.
classCar
{
varmake:String;
varcolor:String;
varyear:int;
functionCar(make,color,year)
{
this.make=make;
this.color=color;
this.year=year;
}
functionGetDescription()
{
returnthis.year+""+this.color+""+this.make;
}
}
varmyCar=newCar("Accord","Maroon",1984);
print(myCar.GetDescription());
Jscript.net还支持定义private和protectedproperty通过GET和SET进行读写。
如下例:
classPerson
{
privatevarm_sName:String;
privatevarm_iAge:int;
functionPerson(name:String,age:int)
{
this.m_sName=name;
this.m_iAge=age;
}
//Name只读
functiongetName():String
{
returnthis.m_sName;
}
//Age读写但是只能用SET
functiongetAge():int
{
returnthis.m_sAge;
}
functionsetAge(newAge:int)
{
if((newAge>=0)&&(newAge<=110))
this.m_iAge=newAge;
else
thrownewAge+"isnotarealisticage!";
}
}
varfred:Person=newPerson("Fred",25);
print(fred.Name);
print(fred.Age);
//这将产生一个编译错误,name是只读的。
fred.Name="Paul";
//这个将正常执行
fred.Age=26;
//这将得到一个run-time错误,值太大了
fred.Age=200;
Jscript.net可以用JScript或任意NET框架语言(如C#,VB7.0)通过增加extends主题词在类声明以后来继承和扩展现有类。这能力允许Jscript.net非常容易地利用NET平台的丰厚资源。为了说明这些,给出一个程序。这个程序扩展了NET框架的ServiceBase类。
//导入需要的.net命名空间
importSystem;
importSystem.ServiceProcess;
importSystem.Diagnostics;
importSystem.Timers;
classSimpleServiceextendsServiceBase
{
privatevartimer:Timer;
functionSimpleService()
{
CanPauseAndContinue=true;
ServiceName="JScriptService";
timer=newTimer();
timer.Interval=1000;
timer.AddOnTimer(OnTimer);
}
protectedoverridefunctionOnStart(args:String[])
{
EventLog.WriteEntry("JScriptServicestarted");
timer.Enabled=true;
}
protectedoverridefunctionOnStop()
{
EventLog.WriteEntry("JScriptServicestopped");
timer.Enabled=false;
}
protectedoverridefunctionOnPause()
{
EventLog.WriteEntry("JScriptServicepaused");
timer.Enabled=false;
}
protectedoverridefunctionOnContinue()
{
EventLog.WriteEntry("JScriptServicecontinued");
timer.Enabled=true;
}
functionOnTimer(source:Object,e:EventArgs)
{
EventLog.WriteEntry("HelloWorldfromJScript!");
}
}
ServiceBase.Run(newSimpleService());

如何在asp+中使用Jscript.net这才是我们关键的问题。我们将通过一个例子来说明这个问题。
访问sqlserver数据库
第一个aps+例子是使用Jscript.net和.net的数据访问类来访问sqlserver数据库,
这里我还将使用大家熟悉的<%%>格式来编写,访问pubs中的authors表,我知道这很简单但是它可以体现一些新的特性。
<%@ImportNamespace="System.Data"%>
<%@ImportNamespace="System.Data.SQL"%>
<%@language="JScript"%>
<linkrel="STYLESHEET"type="text/css"href="style.css">
<%
//设置数据库连接
varmyConnection:SQLConnection=newSQLConnection("server=scripting;uid=sa;pwd=;database=pubs");
//执行查询
varmyCommand:SQLDataSetCommand=newSQLDataSetCommand("select*fromAuthors",myConnection);
//声明变量
vards:DataSet=newDataSet();
varmyTable:DataTable
varmyColumns:ColumnsCollection
varmyCol:DataColumn
varmyRows:RowsCollection
varmyRow:DataRow
//通过FillDataSet方法获取数据
myCommand.FillDataSet(ds,"Authors");
myTable=ds.Tables[0]
%>
<h1>
<%=ds.Tables[0].TableName%>
</h1>
<br>
<TABLE>
<THEAD>
<TR>
<%
//在表格的最上面输出字段名
myColumns=myTable.Columns
for(myColinmyColumns)
{
%>
<THclass="spec">
<%=myCol.ColumnName%>
</TH>
<%
}
%>
</TR>
</THEAD>
<%
//输出所有的纪录
myRows=myTable.Rows
for(myRowinmyRows)
{
%>
<TR>
<%
for(vari:int=0;i<myColumns.Count;i++)
{
%>
<TDclass="spec">
<%=myRow[i]%>
</TD>
<%
}
%>
</TR>
<%
}
%>
</TABLE>

例子2
<%@WebServiceLanguage="JScript"class="Weather"%>
importSystem
importSystem.Web.Services
classWeather{
WebMethodAttributefunctiongetConditions(strCity:String):String
{
varnow=newDate();
switch(strCity.toUpperCase())
{
case"LONDON":
if(now.getMonth()<=7||now.getMonth()>=9)
{
return"overcast"
}
if
{
return"partlyovercast"
}
break;
case"SEATTLE":
if(now.getMonth()==7&&now.getDay()==4)
{
return"torrentialrain"
}
else
{
return"rain"
}
break;
case"LA":
return"smoggy"
break;
case"PHOENIX":
return"damnhot"
break;
default:
return"partlycloudywithachanceofshowers"
}
}
}