GVKun编程网logo

[ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类<Object>的扩展(ajax 类型)

22

在本文中,我们将给您介绍关于[ASP.NETAjax]ECMAScript基础类以及Asp.netAjax对类<Object>的扩展的详细内容,并且为您解答ajax类型的相关问题,此外,我

在本文中,我们将给您介绍关于[ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类<Object>的扩展的详细内容,并且为您解答ajax 类型的相关问题,此外,我们还将为您提供关于AJAX——ASP.NET AJAX(三)ScriptManagerProxy,Timer和UpdateProgress、AJAX——ASP.NET AJAX框架(一)ScriptManager、ASP.NET AJAX(9)-ScriptManagerProxy、ASP.NET Webforms ASP.NET Ajax与ASP.NET MVC和Ajax框架自由的知识。

本文目录一览:

[ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类<Object>的扩展(ajax 类型)

[ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类<Object>的扩展(ajax 类型)

“Everything is Object”,在面向对象的编程语言中谁都知道这句话,但对我来说这是一种感觉,只可意会很难言传。由于我对JavaScript和薄弱,所以在看Asp.net Ajax类库的同时也翻出了ECMAScript顺便学习学习。在.NET中所有类都是继承自Object,同样在JS中也一样说有都继承Object,因此如果对Object进行了扩展,那所有继承Object类的后代肯定会拥有祖先的血缘。

既然开始学习JavaScript那就顺便在这里提一提他的原始数据类型,在JS中有5个原始数据类型(Undefined、Null、Boolean、Number、String),可以通过typeof来判断变量和值的数据类型

1.        Undefined: 当变量被声明但没有被初始化,或函数没有明确返回一个值的时候,该变量或函数即为 Undefined 类型,是Null类型的一种特性。

2.        Null: 当一个对象的值不存在时,该对象返回null。

3.        Boolean:一看就知道,一男一女true/false,值得注意的是0不等于false,但是可以转化为false。

4.        Number:可以定义32位整型数据或64位浮点型数据。从网上的一些资料知道,浮点数在未被计算之前是以String类型存储(不知道是真是假)。当浮点类型数据很大或很小时(可以前后移动六位),将使用E表示法来表示浮点数据,最大可以存储17位数据。另外,isFinite()方法可以判断一个数值是否有限,isNaN()方法可以判断一个数据是非数字类型。通过parseInt()和parseFloat()可以将其他类型转化为数字类型,如果转化不成功则返回NaN(Not a Number)。

5.        String:这是一个唯一没有大小限制的原始类型,其他类型可以通过toString()转化为String类型,值得一提的是数字转化为String类型可以加入2.8.16作为参数已输出二进制,八进制和十六进制的字符串。

下面我们来看一下Object类型,通过var obj=new Object();可以申明一个对象。同.NET中的Object一样,它是所有类的基类。

它具有两个属性:constructor(相当于.NET中的构造函数)建议一个对象函数引用,对于Object类而言,该引用指向本地Object()方法。Prototype对象里prototype对象的一个引用值,通过这个属性可以反射每个对象中的prototype扩展的属性和方法,在Asp.net Ajax中也是利用这个属性类扩展和反射类的。

hasOwnProperty(property)—判断property属性是否存在于对象中,property数据类型为string;isPrototypeOf(object)— 判断一个对象是否是另一对象的 prototype;propertyIsEnumerable(property)— 判断所给出的属性能否使用 for 语句列举出来;toString()—返回对象的原始类型string;valueOf()—返回对象合适的原始值,对于多数类而言,返回的值和toString()相同。这些就是原始Object对象的方法,在其他类中这些方法以同样被继承。

在Asp.NET Ajax中微软为了将整个类库扩展的更适合.NET的开发人员,在原始的Object对象中扩展了两个方法:

Object.__typeName="Object";

Object.getType=function(b){

  var a=b.constructor;

  if(!a||typeof a!=="function"||!a.__typeName||a.__typeName==="Object")return Object;

  return a

};

Object.getTypeName=function(a){

  return Object.getType(a).getName()

};

从上面我们可以看到,Object.getType(type)这个静态方法可以获取一个类的对象,而Object.getTypeName(type)通过调用[prototype]Type.getName()而获取类的名(包括命名空间)。这没有什么好说的,下面来看一下测试:

        <asp:ScriptManager ID="ScriptManager1" runat="server" />

        <div>

        <script language="javascript">

        Type.registerNamespace("NExplus");

        //define a class;

        NExplus.ObjectTest=function(name){

          this._name=name;

        }

        NExplus.ObjectTest.prototype.getName=function(){

          return (this._name === undefined) ? null : this._name;

        }

        NExplus.ObjectTest.prototype.setName=function(name){

          this._name=name;

        }

        //register class;

        NExplus.ObjectTest.registerClass("NExplus.ObjectTest");

        

        NExplus.TestObject=function(){

          var a=new NExplus.ObjectTest("Test is success?");

          document.write(a.getName());

          document.write("<br/>");

          a.setName("Success!");

          document.write(a.getName());

          document.write("<br/>");

          document.write(Object.getTypeName(a)+"<br/>")

        }

        //run;

        NExplus.TestObject();

        </script>

        </div>

运行结果:

Test is success?
Success!
NExplus.ObjectTest

   这个比较简单,微软只是为了和.NET框架更接近而扩展的Object类,我觉得这两个在开发过程中应该很少用到吧,上面的测试顺便测试一下属性J。我很想知道有没有那个好心人翻译了ECMAScript的规范文档,看英文真的好类;<.顺便附上一只捆牢我的两个操作符: ||:从第一个开始,遇到有意义的返回,否则返回最后一个表达式(不一定是Boolean值); &&:从第一个开始,遇到无意义(0,null,undefined,"",false,NaN)的返回,否则返回最后一个表达式(不一定是Boolean值)。

您可能感兴趣的文章:
  • 从零开始学ASP.NET-基础篇
  • ASP.net基础知识之常见错误分析
  • ASP.NET 2.0 程序安全的基础知识
  • ASP.NET中实现文件的保护性下载基础篇
  • ASP.NET MVC基础
  • ASP.NET MVC小结之基础篇(一)
  • ASP.NET MVC小结之基础篇(二)
  • ASP.NET母版页基础知识介绍
  • ASP.NET 5已终结,迎来ASP.NET Core 1.0和.NET Core 1.0

AJAX——ASP.NET AJAX(三)ScriptManagerProxy,Timer和UpdateProgress

AJAX——ASP.NET AJAX(三)ScriptManagerProxy,Timer和UpdateProgress

上两篇博客简单学习了ScriptManagerUpdatePanel两个异步刷新的核心控件,这篇博客继续学习ASP.NET AJAX框架中的其它三个控件。


一,首先看ScriptManagerProxy控件,它和ScriptManager非常相似,那为什么它出现呢?ASP.NETAJAX中,由于一个ASPX页面上只能有一个ScriptManager控件,所以在有母版页的情况下,如果需要在Master-PageContent-Page中需要引入不同的脚本时,这就需要在Content-page中使用ScriptManagerProxy。这就是它俩的主要区别。

    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
    </asp:ScriptManagerProxy>

二,Timer控件,这个大家应该不陌生,在VBC#中当中,我们经常用它,在这里他也同样一样,只不过是异步刷新而已。很简单的例子,只要把他放在UpdatePanel控件里,就能实现局部刷新的秒表功能:


	<body>
	    <form id="form1" runat="server">
			<asp:ScriptManager ID="ScriptManager1" runat="server">
			</asp:ScriptManager>
	
			<asp:UpdatePanel ID="UpdatePanel1" runat="server">
				<ContentTemplate>
					<%= DateTime.Now %>
					<asp:Timer ID="Timer1" runat="server" Interval="1000">
					</asp:Timer>
				</ContentTemplate>
			</asp:UpdatePanel>
	    </form>
	</body>

三,UpdateProgress控件:

1,提出原因:在现实的网络中,当我们打开某一个网站或链接时,由于种种原因经常要等待页面显示出来,这样的用户体验真的很差。如果能在页面执行较长时间操作的同时,给用户提供一个类似于浏览器状态栏那样的进度条,将会很大地改善用户体验。所以微软在ASP.NETAjax中为我们提供了UpdateProgress控件,它可以轻松的实现这样的功能。

2,简介:UpdateProgress控件用于当页面异步更新数据时,显示给用户友好的提示信息。该信息可以是文本信息,也可以是图片信息,用户可以根据自己的项目需要或自己的意愿进行选择。该控件的简单定义形式如下所示:


	<asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout="false" AssociatedUpdatePanelID="UpdatePanel1">
		<Progresstemplate>
			表示进度的信息
		</Progresstemplate>
	</asp:UpdateProgress>

3,看一下它的几个常用属性:

属性

说明

AssociatedUpdatePannelID

该属性和该UpdateProgress相关联的UpdatePanelID,通常用于有多个UpdatePanel的情况下

displayAfter

进度信息被展示后的ms

DynamicLayout

UpdateProgress控件是否动态绘制,而不占用网页空间

具体的使用,需要根据实际情况,把我们的一些表示进度的图片也好,文字也好,写到我们的UpdateProgressProgresstemplate中即可,可以指定UpdatePanel来进行测试!!!

这三个控件相对来说简单一些,但是也都非常有用。很好的配合UpdatePanelScriptManager来进行局部异步刷新,可以大大提高用户的体验度!综上为ASP.NETAJAX框架中的五个控件的简单学习,还需要在实际项目中来锻炼提高,加深理解!!!

AJAX——ASP.NET AJAX框架(一)ScriptManager

AJAX——ASP.NET AJAX框架(一)ScriptManager

前边我们针对以XMLHttpRequest为核心学习了AJAX的相关知识,接下来,重点学习一下微软在ASP.NET中的AJAX的框架的基础学习,主要是AJAXExtension中的几个控件,如下图:


而,这篇博客,我们来重点看一下ScriptManager的学习。而我主要是通过他的属性来进行学习的。

一,概述:ScriptManager控件包括在ASP.NET2.0以上版本的AJAXExtensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问WebService。所有需要支持ASP.NET AJAXASP.NET页面上有且只能有一个ScriptManager控件。

如下():

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

简单理解就是每一个需要异步更新的页面,最开始都需要添加这个控件,保证异步更新的顺利完成。



二,下边看一下它的几个常用属性:

属性或方法

说明

AllowCustomErrorsRedirect

该属性为布尔类型,默认值为true,表示在异步更新发生异常时是否使用Web.config<customErrors>节中的设定。Web.config<customErrors>节中可以指定应用程序级别的错误处理页面,这将通过重定向至某个专门显示异常的页面来实现

AsyncPostBackerrorMessage

该属性表示了异步回送过程中发生的异常将显示出的消息,我们可在ScriptManager的声明中设置这个属性

AsyncPostBackTimeout

异步回传时超时限制,默认值为90,单位为秒

AsyncPostBackerror

异步回传发生异常时的服务端处理函数,在这里可以捕获信息并作相应的处理。

EnablePartialRendering

该属性可以使页面的某些控件或某个区域实现Ajax类型的异步回送和局部更新功能。若需要启用页面的局部更新模式,则应该将EnablePartialRendering属性设置为true,保持默认值即可

ScriptPath

设置所有的脚本块的根目录,作为全局属性,包括自定义的脚本块或者引用第三方的脚本块。如果在Scripts中的<asp:ScriptReference/>标签中设置了Path属性,它将覆盖该属性

ResolveScriptReference

指定ResolveScriptReference事件的服务器端处理函数,在该函数中可以修改某一条脚本的相关信息如路径、版本等。

ScriptMode

指定ScriptManager发送到客户端的脚本的模式,有四种模式:AutoInheritDebugRelease,默认值为Auto。具体如下表所示


ScriptMode的属性值

属性值

说明

Auto

该属性值用于根据web.config配置中的retail配置节的值来决定脚本的模式。如果retail配置节的值为true,则把发布模式的脚本发送到客户端,反之则发送调试脚本

Debug

该属性值用于当retail配置节的值不为true时,则发送debug版本的客户端脚本

Release

该属性值用于当retail配置节的值不为false时,则发送Release版本的客户端脚本

Inherit

该属性值意义同Auto相同



认真阅读上边的属性和方法,通过实践来了解,就非常容易了,这里我来写其中几个例子。

1AllowCustomErrorsRedirect属性,当它设为true时就是利用我们web.config<customErrors>指向的错误页面,如果程序出现了错误,则直接跳转到指定的错误页面。我们来前代码:

前台代码:

    <form id="form1" runat="server">
        <%--错误页配置--%>
        <%--指定AllowCustomErrorsRedirect的属性为true --%>
		<asp:ScriptManager ID="ScriptManager1" runat="server" AllowCustomErrorsRedirect="true">
		</asp:ScriptManager>

		<asp:UpdatePanel ID="UpdatePanel1" runat="server">
			<ContentTemplate>
				<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
			</ContentTemplate>
		</asp:UpdatePanel>
    </form>


后台C#代码:

	protected void Button1_Click(object sender,EventArgs e)
	{
		throw new Exception("出现错误了");
	}

Web.config配置:
    <!--错误页配置,本项目中提前设置好的错误页-->
    <customErrors mode="On" defaultRedirect="~/Error.aspx"></customErrors>

这样设置后当程序出现错误时,就会自动跳转到我们设置好的错误页上。

2AsyncPostBackerrorMessageAsyncPostBackerror这两个属性,主要是针对错误信息进行处理的。对应的方法为OnAsyncPostBackerror(当发生异步通讯错误时)。看这个例子吧:

前台代码:

	<body>
	    <form id="form1" runat="server">
	
	        <%--AllowCustomErrorsRedirect属性设置为false,配合后台的自定义错误使用--%>
			<asp:ScriptManager ID="ScriptManager1" runat="server" AllowCustomErrorsRedirect="false" OnAsyncPostBackerror="ScriptManager1_AsyncPostBackerror">
			</asp:ScriptManager>
	
			<asp:UpdatePanel ID="UpdatePanel1" runat="server">
				<ContentTemplate>
					<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
				</ContentTemplate>
			</asp:UpdatePanel>
			
			<%--自定义错误处理--%>
			<div id="error"></div>
			
			<script type="text/javascript" language="javascript">
				Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender,e)
				{
				    e.set_errorHandled(true);
				    //将信息显示到上面的div区块中innerHTML,这里可以设置默认的错误信息
					$get("error").innerHTML = "Sorry,an error has occurred: " + e.get_error().message;
					setTimeout(function(){ $get("error").innerHTML = ""; },3000);//3秒后变为空
				});
			</script>
		</form>
	</body>

后台代码:
	protected void Button1_Click(object sender,EventArgs e)
		{
	        //自定义错误处理,配合web.config文件中的错误配置节点customErrors(设置为on的时候才生效,同时还要制定错误页)和AllowCustomErrorsRedirect(是否允许customErrors)使用
			throw new Exception("错误信息提示!");
		}
	    //异步刷新出现错误时,触发的事件
		protected void ScriptManager1_AsyncPostBackerror(object sender,AsyncPostBackerrorEventArgs e)
		{
	        //客户端接受到的错误的信息
			ScriptManager.GetCurrent(this).AsyncPostBackerrorMessage = e.Exception.Message;
		}

这样我们程序出错时,就出显示出错误信息!


这里我举了两个例子,来学习ScriptManager的属性方法,其他的也需要我们通过实践,来理解这些属性和方法的意义,这样我们才能更好的掌握。这里英文相对来说多了些,还是非常需要耐下心来认真读英文理解。总而言之,这里的控件学习和我们的控件学习没有什么区别,几个属性,方法完事。重要的是我们用一用,这样就能再用了,里边的属性方法不会了,我们可以有针对性的上网查一下!!!下一篇,学习一个非常重要的控件UpdatePanle控件。其实这篇博客里边也涉及到了。

ASP.NET AJAX(9)-ScriptManagerProxy

ASP.NET AJAX(9)-ScriptManagerProxy

ASP.NET AJAX(9)-ScriptManagerProxy


1.使用时机:有罩MasterPage或是使用UserControl的时候

2.因为一个页面只能放一个ScriptManager,所以当:

MasterPage放ScriptManager→ContentPage就放ScriptManagerProxy

UserControl放ScriptManagerProxy→用UserControl那个页面就放一个ScriptManager

可以说ScriptManerProxy就是ScriptManager的职务代理人啦。

3.判断页面是否有ScriptManager?

原文:大专栏  ASP.NET AJAX(9)-ScriptManagerProxy

ASP.NET Webforms ASP.NET Ajax与ASP.NET MVC和Ajax框架自由

ASP.NET Webforms ASP.NET Ajax与ASP.NET MVC和Ajax框架自由

如果给予选择,你会采取哪条路?

ASP.NET Webforms + ASP.NET AJAX

要么

ASP.NET MVC + JavaScript Framework of your Choice

ASP.NET Webforms / ASP.NET AJAX与MVC有任何限制吗?

解决方法

我最近做了两次,我将在十分钟内拿MVC九次。

>我真的不喜欢asp.net ajax控件的实现,我遇到了很多时间,事件和调试回发问题的问题。我从http://encosia.com/2007/07/11/why-aspnet-ajax-updatepanels-are-dangerous/学到了很多
> asp.net项目我们使用了MVP模式http://www.codeplex.com/aspnetmvp,并且模式运行良好。但是,由于我们直接与服务器端控件进行交互(即大量的gridview操作),所以我们在视图中得到了很多代码。这个代码与单元测试框架几乎是不可接受的。我们应该更加努力地将代码保留在视图之外,但在某些情况下,它更容易,更不麻烦。

一次我选择使用asp.net表单开发将是使用gridview控件。我们正在使用jquery为我们的JavaScript框架与MVC,还没有找到一个很好的gridview像控件。我们有功能的东西,但是我们沉迷于学习,调整和调试的时间与使用asp.net服务器端控件的时间一直很大。一个失去了微软提供的非asp.net表单开发的所有好的小部件。这些小部件的丢失正在释放,同时当您第一次启动时也是可怕的。

最后我很高兴我们正在做MVC开发。我的团队和我学到了一个新的框架(我们之前只有asp.net开发者),并且已经用html和javascript弄脏了我们的手。如果我们有需要,这些技能可以用于其他项目或其他语言。

今天关于[ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类<Object>的扩展ajax 类型的介绍到此结束,谢谢您的阅读,有关AJAX——ASP.NET AJAX(三)ScriptManagerProxy,Timer和UpdateProgress、AJAX——ASP.NET AJAX框架(一)ScriptManager、ASP.NET AJAX(9)-ScriptManagerProxy、ASP.NET Webforms ASP.NET Ajax与ASP.NET MVC和Ajax框架自由等更多相关知识的信息可以在本站进行查询。

本文标签: