ASP.NET AJAX 1.0框架之增强服务器控件的客户端功能

全面掌握ASP.NET服务器端控件技术大全 ASP.NET 是一个强大的、开源的服务器端Web应用框架,它允许开发者使用.NET语言,例如C#或VB.NET,来构建动态网站、Web应用程序和Web服务。该框架最初由Microsoft在2002年发布,随着.NET平台的发展,ASP.NET也在不断地更新和优化,以适应现代Web开发的需求。服务器端控件,顾名思义,是在服务器上执行的控件。它们可以在用户进行交互操作时,将数据和事件从客户端发送到服务器。控件的分类非常广泛,其中主要可以分为标准服务器端控件和专用服务器端控件两大类。 阅读详情

1.

微软ASP.NET 2.0 AJAX Extensions,作为ASP.NET 2.0 AJAX 1.0框架组成的最基本部分,为扩展ASP.NET 2.0服务器端控件提供了支持。借助于这个新框架,你可以使用JavaScript,DHTML以及Web浏览器提供的AJAX能力实现更为丰富的可视化效果。

本文中,我们将探讨如何创建一个使用ASP.NET 2.0 AJAX扩展特征的ASP.NET Web服务器控件以扩展浏览器端功能。然后,我们可以使用一个客户端控件实现把这种新功能添加到客户端文档对象模型(DOM)元素中。注意,这个客户端控件是通过实现服务器控件提供的IScriptControl接口来建立与一个服务器控件的关联。

具体来说,我们要讨论:

◆如何创建一个定制Web服务器控件,它能够封装客户端行为以及用户可以用于设置并控制该行为的属性;

◆如何创建一个与该Web服务器控件相关联的客户端控件;

◆如何在客户端控件中处理浏览器DOM事件。

【注意】除本文介绍的方法外,新框架中还提供了通过创建一个扩展(extender)控件—它能够把客户端能力封装到一个行为中,然后把它依附到一个Web服务器控件—来扩展Web服务器控件(添加丰富的客户端功能)的功能。因为一个扩展控件并不是它的关联控件中的一部分,所以,你可以创建单个的可以与若干类型的Web服务器控件相关联的扩展控件。本文中,我们不讨论这种技术。

二、客户端需求分析

把客户端行为添加到一个Web服务器控件的第一步是,决定该控件在浏览器中将提供什么行为。然后,我们还要确定为了实现该行为必须提供的客户端功能。

在本文中创建的示例Web服务器控件实现一种简单的客户端行为。当在浏览器中选择(拥有焦点)它时,该控件(一个TextBox控件)被高度显示。例如,当它拥有焦点时,该控件可能改变背景颜色,而当焦点移动到另一个控件时还原为缺省的颜色。

为了实现这一行为,本文中的客户端控件必须实现下列功能:

①提供一种实现高亮DOM元素的方法。

为了高亮一个ASP.NET Web页面中的DOM元素,本文中的客户端控件将应用一种层叠式样表(CSS)风格—我们通过一个类来提供。此外,这个风格是用户可配置的。

②实现一种方法以便把DOM元素恢复到正常状态。

也是通过应用一种层叠式样表(CSS)风格来从一个ASP.NET Web页面元素中删除其高亮状态,而且此风格也是用户可配置的。

③标识何时选择一个DOM元素。

为了标识何时选择一个DOM元素(拥有焦点),该控件需要处理对应DOM元素的onfocus事件。

④标识何时取消选择一个DOM元素。

为此,该控件需要处理DOM元素的onblur事件。

三、创建Web服务器控件

从基本操作思路及形式上看,一个使用ASP.NET 2.0 AJAX扩展技术包括客户端特征的Web服务器控件类似于任何其它Web服务器控件。然而,该控件还必须实现System.Web.UI命名空间中的IScriptControl接口。在本例中,我们将通过继承TextBox类并实现IScriptControl接口来扩展ASP.NET TextBox服务器控件。

启动Visual Studio 2005,选择“文件→新建网站…”,然后选择“ASP.NET AJAX-Enabled Web Site”模板,命名工程为“AjaxEnhancedServCtrl”,并选择C#作为编程语言,最后点击OK。

然后,右击解决方案资源管理器添加一个新类,并命名为“EnhancedTextBox”(见下图1)。

图1:通过创建一个新类创建一个扩展的Web服务器控件

然后,打开文件EnhancedTextBox.cs,并作如下修改:

public class EnhancedTextBox  : TextBox, IScriptControl

至此,我们可以借助于VS2005提供的友好的“类关系图”编辑器来更为直观地为此类添加字段、属性和方法等。这只要在文件EnhancedTextBox.cs上右击弹出菜单中的“查看类关系图”来切换到类关系图编辑器。最后编辑完成的类关系图如下图2所示。

图2:类EnhancedTextBox的类关系图

【注意】通过试验,我发现无法通过类关系图在类上继承接口IScriptControl的有关成员。不知什么缘故。

下面让我们进行具体分析。

这个新控件提供了两个用于实现客户端要求的属性:

◆HighlightCssClass—在控件取得焦点时,用来高亮DOM元素的CSS类;

◆NoHighlightCssClass—在控件失去焦点时,应用于DOM元素的CSS类。

 

2.

实现IScriptControl接口

下列是你必须在一个Web服务器控件中实现的IScriptControl接口中的成员:

①GetScriptDescriptors()

此方法返回一个ScriptDescriptor对象(此对象提供了有关与Web服务器控件一起使用的客户端组件实例的信息)集合。其中包括要创建的客户端类型,要指派的属性,以及要添加处理器的事件。

②GetScriptReferences()

此方法返回一个ScriptReference对象(此对象提供了关于与控件一起包括的客户端脚本库的信息)集合。这个客户端脚本库定义了客户端类型和相关的任何其它JavaScript代码。

本文中的Web服务器控件使用GetScriptDescriptors()方法来定义客户端控件类型的实例。该控件创建一个新的ScriptControlDescriptor对象(派生自ScriptDescriptor类的ScriptControlDescriptor子类)并且把它包括在GetScriptDescriptors()方法的返回值中。

ScriptControlDescriptor对象包括了客户端类(EnhancedTextBox)的名字和该Web服务器控件相应的ClientID值—这个值将用作生成的DOM元素的id值。该客户端类名和ClientID值将被传递给ScriptControlDescriptor对象相应的构造器。

ScriptControlDescriptor类用于设置客户端控件的属性值—这些值都来自于Web服务器控件的属性。为了定义客户端控件的属性,本文中的服务器控件使用了ScriptControlDescriptor类的AddProperty(String,Object)方法。然后,它为该客户端控件属性指定一个名和值(基于Web服务器控件相应的属性)。这里使用一个ScriptControlDescriptor对象来设置客户端控件的highlightCssClass和nohighlightCssClass属性的值。

该控件在GetScriptDescriptors()方法的返回值中提供了这个ScriptControlDescriptor对象。因此,无论何时把此Web服务器控件生成到浏览器端,ASP.NET AJAX都会相应地生成新的JavaScript—此脚本将创建一个带有所有的属性和事件处理器的客户端控件的实例。然后,根据从Web服务器控件生成的ClientID,此控件实例被依附到相应的DOM元素。下列代码展示了本文中的示例Web页面中的包括该Web服务器控件的声明性ASP.NET标记。

 3.

注意,该页面生成的输出包括一个对$create方法的调用。这个方法将标识出要创建的客户端类,同时还提供了与客户端控件相关联的DOM对象的客户端属性和id值。下面的代码展示了一个生成的$create方法。

$create(Samples.EnhancedTextBox ,{"highlightCssClass":"MyHighLight",

"nohighlightCssClass":"MyLowLight"}, null,null,$get('EnhancedTextBox 1'));

本文中的Web服务器控件使用GetScriptReferences()方法传递定义客户端控件类型的脚本库的位置—在这个示例中,这相应于一个指向EnhancedTextBox.js脚本文件(后面将创建)的URL。该引用是通过创建一个新的ScriptReference对象实现的,然后,把包含客户端代码的文件的路径属性设置为URL。

下列示例展示了GetScriptDescriptors()和GetScriptReferences()方法的实现。

protected virtual IEnumerable GetScriptReferences()

{

ScriptReference reference = new ScriptReference();

reference.Path = ResolveClientUrl("EnhancedTextBox .js");

return new ScriptReference[] { reference };

}

protected virtual IEnumerable GetScriptDescriptors()

{

ScriptControlDescriptor descriptor = new ScriptControlDescriptor

("Samples.EnhancedTextBox ",this.ClientID);

descriptor.AddProperty("highlightCssClass", this.HighlightCssClass);

descriptor.AddProperty("nohighlightCssClass", this.NoHighlightCssClass);

return new ScriptDescriptor[] { descriptor };

}

IEnumerable IScriptControl.GetScriptReferences()

{

return GetScriptReferences();

}

IEnumerable IScriptControl.GetScriptDescriptors()

{

return GetScriptDescriptors();

}

客户端控件的注册

必须使用当前页面中的ScriptManager对象来注册客户端控件。这是通过调用ScriptManager类的RegisterScriptControl()方法并提供一个到该客户端控件的引用实现的。

本文中的Web服务器控件使用页面中的ScriptManager控件把本身注册为一个客户端控件。为此,此控件重载了基类控件TextBox中的OnPreRender(EventArgs)方法。然后,它调用RegisterScriptControl()方法把本身注册为一个客户端控件。此外,该控件还注册了由GetScriptDescriptors()方法创建的脚本描述符—这是通过在控件的Render方法中调用RegisterScriptDescriptors()方法实现的。

下列代码展示了RegisterScriptControl()和RegisterScriptDescriptors()方法的使用(加粗部分)。

protected override void OnPreRender(EventArgs e)

{

if (!this.DesignMode)

{

//测试ScriptManager的存在;如果存在,则注册之

sm = ScriptManager.GetCurrent(Page);

if (sm == null)

throw new HttpException("当前页面中必须存在一个ScriptManager控件。");

sm.RegisterScriptControl(this);

    }

base.OnPreRender(e);

}

protected override void Render(HtmlTextWriter writer)

{

if (!this.DesignMode)

sm.RegisterScriptDescriptors(this);

    base.Render(writer);

}

关于该Web服务器控件完整的代码请参考本文相应源码文件。

 

 

四、创建客户端控件

注意,在上面Web服务器控件中,GetScriptReferences()方法指定一个包含控件类型的客户端代码的JavaScript文件(EnhancedTextBox.js)。在此,我们要详细讨论该文件中的JavaScript代码。

右击“解决方案资源管理器”,选择菜单项“添加新项…”,创建一个JavaScript文件—EnhancedTextBox.js。在此脚本文件中,我们要定义一个客户端控件类,它将通过实现服务器控件提供的IScriptControl接口来建立与前面创建的服务器控件的关联。

注意,该客户端控件代码必须与由GetScriptDescriptors()方法返回的ScriptDescriptor对象中指定的成员相匹配。此外,这个客户端控件完全可以拥有与Web服务器控件类中的成员不相匹配的成员。

本文中的Web服务器控件把该客户端控件的名字设置为Samples.EnhancedTextBox,并且定义该客户端控件的两个属性—highlightCssClass和nohighlightCssClass。

注册客户端命名空间

首先,客户端控件代码必须调用Type类的registerNamespace方法来注册它的命名空间(“Samples”)。下列语句展示如何注册控件的命名空间。

//注册控件的命名空间

Type.registerNamespace('Samples');

定义客户端类

接下来,我们需要定义Samples.EnhancedTextBox类。这个类包括两个Web服务器控件提供的用于存储属性值的属性。它还包括两个指定DOM元素(关联于Samples.EnhancedTextBox控件)的onfocus和onblur事件处理器的事件委托。

下列示例展示了Samples.EnhancedTextBox类的定义。

Samples.EnhancedTextBox  = function(element) {

Samples.EnhancedTextBox .initializeBase(this, [element]);

this._highlightCssClass = null;

this._nohighlightCssClass = null;

}

定义类的Prototype(原型)

在定义Samples.EnhancedTextBox类之后,需要在客户端代码中定义该类的prototype。这个prototype中要包括属性的get和set访问器,以及事件处理器,还包括一个initialize方法(当创建该控件的一个实例时调用)和一个dispose方法(当页面中不再要求使用该控件时调用)。

定义DOM元素的事件处理器

一个客户端类的事件处理器被定义为类prototype中的方法。这些处理器关联于事件委托并且关联于浏览器DOM的事件—通过使用addHandlers方法实现(后面将讨论这个方法)。

下列片断展示了Samples.EnhancedTextBox控件的事件处理器方法。

_onFocus : function(e) {

if (this.get_element() && !this.get_element().disabled) {

this.get_element().className = this._highlightCssClass;

}

},

_onBlur : function(e) {

if (this.get_element() && !this.get_element().disabled) {

this.get_element().className = this._nohighlightCssClass;         

}

}

定义属性get和set访问器

每个在服务器控件的GetScriptDescriptors()方法的ScriptDescriptor对象中标识的属性都必须拥有相应的客户端访问器。这些客户端属性访问器被定义为客户端类prototype中的get_<属性名>和set_<属性名>方法。

【注意】JavaScript是大小写敏感的。因此,get和set访问器名称必须准确匹配Web服务器控件的GetScriptDescriptors()方法中的ScriptDescriptor对象中标识的属性名称。

下列的示例展示了相应于Samples.EnhancedTextBox控件的get和set属性访问器。

get_highlightCssClass : function() {

return this._highlightCssClass;

},

set_highlightCssClass : function(value) {

if (this._highlightCssClass !== value) {

this._highlightCssClass = value;

this.raisePropertyChanged('highlightCssClass');

}

},

get_nohighlightCssClass : function() {

return this._nohighlightCssClass;

},

set_nohighlightCssClass : function(value) {

if (this._nohighlightCssClass !== value) {

this._nohighlightCssClass = value;

this.raisePropertyChanged('nohighlightCssClass');

}

}

 

4.

实现initialize和dispose方法

当创建该控件的一个实例时,需要调用initialize方法。在这个方法中,需要设置缺省的属性值,创建函数委托,并且把委托添加为事件处理器。

本文中Samples.EnhancedTextBox类的initialize方法完成如下任务:

①调用Sys.UI.Control基类的initialize方法;

②调用addHandlers方法以便把事件委托添加为相关的HTML元素()的onfocus和onblur事件的处理器。

当页面中不再使用该控件的一个实例并且将删除之时,调用dispose方法。使用这个方法可以释放该控件不再要求使用的任何资源—例如DOM事件处理器。

本文中Samples.EnhancedTextBox类的dispose方法完成如下任务:

◆调用clearHandlers方法来清除作为相关联的DOM元素的onfocus和onblur事件处理器的事件委托。

◆调用基类Control的dispose方法。

【注意】一个客户端类的dispose方法可能不止一次被调用。因此,在编写dispose方法的内容时应该注意这一点。

下列示例展示Samples.EnhancedTextBox prototype中initialize和dispose方法的实现。

initialize : function() {

Samples.EnhancedTextBox .callBaseMethod(this, 'initialize');

this._onfocusHandler = Function.createDelegate(this, this._onFocus);

this._onblurHandler = Function.createDelegate(this, this._onBlur);

$addHandlers(this.get_element(),

{ 'focus' : this._onFocus,

'blur' : this._onBlur },

this);

this.get_element().className = this._nohighlightCssClass;

},

dispose : function() {

$clearHandlers(this.get_element());

Samples.EnhancedTextBox .callBaseMethod(this, 'dispose');

}

注册控件

创建客户端控件的最后一项任务是通过调用registerClass方法注册客户端类。因为该类是一个客户端控件,对registerClass方法的调用需要包括要注册的JavaScript类名,还应指定Control为基类。

下列代码展示了Samples.EnhancedTextBox控件中对registerClass方法的调用。注意,后面还包括一个对Sys.Application对象的notifyScriptLoaded方法的调用。为了通知微软AJAX库JavaScript文件已经加载,必须调用这个方法。

Samples.EnhancedTextBox .registerClass('Samples.EnhancedTextBox ', Sys.UI.Control);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

下面是这个客户端控件—Samples.EnhancedTextBox的完整代码:

//注册控件相应的命名空间

Type.registerNamespace('Samples');

//定义控件属性

Samples.EnhancedTextBox  = function(element) {

Samples.EnhancedTextBox .initializeBase(this, [element]);

this._highlightCssClass = null;

this._nohighlightCssClass = null;

}

//

//创建控件的prototype

//

Samples.EnhancedTextBox .prototype = {

initialize : function() {

Samples.EnhancedTextBox .callBaseMethod(this, 'initialize');

this._onfocusHandler = Function.createDelegate(this, this._onFocus);

this._onblurHandler = Function.createDelegate(this, this._onBlur);

$addHandlers(this.get_element(),

{ 'focus' : this._onFocus,

'blur' : this._onBlur },

this);

this.get_element().className = this._nohighlightCssClass;

},

dispose : function() {

$clearHandlers(this.get_element());

Samples.EnhancedTextBox .callBaseMethod(this, 'dispose');

},

//事件委托

_onFocus : function(e) {

if (this.get_element() && !this.get_element().disabled) {

this.get_element().className = this._highlightCssClass;         

}

},

_onBlur : function(e) {

if (this.get_element() && !this.get_element().disabled) {

this.get_element().className = this._nohighlightCssClass;         

}

},

//控件属性

get_highlightCssClass : function() {

return this._highlightCssClass;

},

set_highlightCssClass : function(value) {

if (this._highlightCssClass !== value) {

this._highlightCssClass = value;

this.raisePropertyChanged('highlightCssClass');

}

},

get_nohighlightCssClass : function() {

return this._nohighlightCssClass;

},

set_nohighlightCssClass : function(value) {

if (this._nohighlightCssClass !== value) {

this._nohighlightCssClass = value;

this.raisePropertyChanged('nohighlightCssClass');

}

}

}

//相应于JSON串行化的可选描述符

Samples.EnhancedTextBox .descriptor = {

properties: [   {name: 'highlightCssClass', type: String},

{name: 'nohighlightCssClass', type: String} ]

}

//把该类注册为一个继承自Sys.UI.Control的类型

Samples.EnhancedTextBox .registerClass('Samples.EnhancedTextBox ', Sys.UI.Control);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

在此,我们看到了相对模块化和面向对象化的JavaScript编程。而且,在属性descriptor的定义中还使用了JSON表示方式,从而进一步简化了JavaScript编程。

据估计,ASP.NET 2.0 AJAX框架小组有可能在未来的版本中在上面的js编辑器中加入对JavaScript以及框架特有语法的智能感知支持;这样的话,一切将趋于完美.

 

5.

五、试验—在ASP.NET页面中应用客户端控件

在此,我们仅概括描述如何在一个ASP.NET Web页面中使用示例客户端控件的步骤:

1.创建一个新的ASP.NET Web页面。

2.如果该页面上没有一个ScriptManager控件,添加一个。

3.对于将以高亮显示和不以高亮显示的文本框分别创建风格规则。

4.把一个@register指令添加到页面上,然后指定该示例Web服务器控件的命名空间和TagPrefix属性。

5.通过使用标记把EnhancedTextBox控件的一个实例添加到页面。

6.在页面添加另一个控件,例如一个按钮控件。

7.把HighlightCssClass属性设置为highlight CSS风格,并把NoHighlightCssClass属性设置为no-highlight CSS风格。

8.运行该页面并且依次选择每一个控件。

下图3展示了示例Web程序的运行结果快照。

图3:示例Web程序的运行结果快照

请注意,当你选择三个EnhancedTextBox控件中的任何一个时,它以高亮显示;当焦点离开时,高亮显示恢复到原来。

六、小结

通过本文分析,我们可以看出,ASP.NET AJAX框架不仅仅是为基于ASP.NET 2.0的Web开发提供了一种客户端AJAX方案,开发人员还可以基于ASP.NET 2.0中现成的已经具有强大功能的服务器控件进一步创建自己具有更强功能的客户端组件,并应用于自己的Web开发中。

另外,上面分析中的第一步(创建Web服务器控件)相对比较容易,基本是公式化的;而第二步(创建客户端控件)则相对难度大一些,这一步中需要纯手工的JavaScript编程,只能依赖于新框架中提供的现成简单例子并进行自己的扩展,没有针对新框架的智能感知的JavaScript编辑器所用,而且需要开发人员对新框架以及对JavaScript编程的面向对象特征有较深入的理解。还好,这基本上算是基于ASP.NET AJAX框架进行开发中难度系数最大且需求量相对较少的部分,因此普通AJAX开发者是不必过于担心的。

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;

namespace Samples.CS
{
    public class SampleTextBox : TextBox, IScriptControl
    {
        private string _highlightCssClass;
        private string _noHighlightCssClass;
        private ScriptManager sm;

        public string HighlightCssClass
        {
            get { return _highlightCssClass; }
            set { _highlightCssClass = value; }
        }

        public string NoHighlightCssClass
        {
            get { return _noHighlightCssClass; }
            set { _noHighlightCssClass = value; }
        }

        protected override void OnPreRender(EventArgs e)
        {
            if (!this.DesignMode)
            {
                // Test for ScriptManager and register if it exists
                sm = ScriptManager.GetCurrent(Page);

                if (sm == null)
                    throw new HttpException("A ScriptManager control must exist on the current page.");

                sm.RegisterScriptControl(this);
            }

            base.OnPreRender(e);
        }

        protected override void Render(HtmlTextWriter writer)
        {
            if (!this.DesignMode)
                sm.RegisterScriptDescriptors(this);

            base.Render(writer);
        }

        protected virtual IEnumerable<ScriptReference> GetScriptReferences()
        {
            ScriptReference reference = new ScriptReference();
            reference.Path = ResolveClientUrl("SampleTextBox.js");

            return new ScriptReference[] { reference };
        }

        protected virtual IEnumerable<ScriptDescriptor> GetScriptDescriptors()
        {
            ScriptControlDescriptor descriptor = new ScriptControlDescriptor("Samples.SampleTextBox", this.ClientID);
            descriptor.AddProperty("highlightCssClass", this.HighlightCssClass);
            descriptor.AddProperty("nohighlightCssClass", this.NoHighlightCssClass);

            return new ScriptDescriptor[] { descriptor };
        }

        IEnumerable<ScriptReference> IScriptControl.GetScriptReferences()
        {
            return GetScriptReferences();
        }

        IEnumerable<ScriptDescriptor> IScriptControl.GetScriptDescriptors()
        {
            return GetScriptDescriptors();
        }
    }
}

AjaxControlToolkit 1.0:ASP.NET的Ajax控件库 本文还有配套的精品资源,点击获取 简介:AjaxControlToolkit 1.0 是一个专为ASP.NET开发人员提供的控件和扩展器库,包含了一系列基于Ajax技术的用户界面组件,实现了异步交互和页面动态更新。它包括了诸如Accordion、Calendar、CascadingDropDown、ModalPopup和UpdatePanel等预构建控件,以及完整的项目源代... 阅读详情

相关推荐

Coolite Toolkit Pro Edition 0.7.0: 面向ASP.NET的AJAX组件库

Coolite Toolkit Pro Edition 0.7.0 是一个专为ASP.NET开发者打造的增强型AJAX控件包,它包含了丰富的用户界面元素和高级功能,旨在简化Web应用开发,并提升最终用户的交互体验。本章将概述Coolite Toolkit Pro Edition 0.7.0的主要特性,帮助开发者快速理解产品的优势和适用场景。Coolite Toolkit Pro Edition 0.7.0 的文件结构是经过精心设计的,以便为开发者提供清晰、易于管理的项目布局。

weixin_36431145的博客 653

随之而来的变化—ASP.NET AJAX Control Toolkit新版本发布(Version 1.0.61020.0)

====================================================== 注:重要!程序员如何有效的放松身心!下班后做什么? ====================================================== 随之而来的变化—asp.net ajax control toolkit新版本发布(version 1.0.61020

101

ASP.NET AJAX客户端编程:实战技巧与关键概念

ASP.NET Ajax是ASP.NET平台中集成的一套客户端脚本库,旨在帮助开发者构建富交互式Web应用程序。它通过异步请求技术(AJAX)减少了与服务器的往返次数,从而提高用户界面响应速度,并改善用户体验。随着技术的不断演进,ASP.NET Ajax已被整合进.NET框架,成为构建动态网页的重要工具。jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax交互。

weixin_31569663的博客 1035

探讨微软ASP.NET AJAX控件开发技术(服务器端)

一、简介到目前为止,我们已经讨论了开发Ajax控件所涉及的客户端相关技术。现在,让我们来讨论此过程中与服务器端相关的一些技术。需要说明的是,在【客户端】篇中我们的举例本质上仅是使用ASP.NET AJAX框架提供的面向对象JavaScript技术来增强了一个客户端图像组件,而没有明显涉及到AJAX技术(除了ScriptManager在后台以AJAX方式下载并管理客户端脚本代码外)。所以,这

小肖的专栏 1247

ASP.NET图表生成技术详解

ASP.NET为开发者提供了强大的图表生成能力,使得在Web应用程序中展示数据变得既直观又高效。开发者可以根据需求从简单的内置图表控件开始,到集成复杂的第三方图表库,甚至自定义图表样式和交互功能。本章将简要介绍图表生成的基本概念,为后续章节深入探讨各种技术实现与优化策略打下基础。我们将从服务器端控件的图表生成开始,逐步扩展到前端技术的结合使用,最后讨论如何通过第三方库和优化策略提升图表的功能性和用户体验。

weixin_42589700的博客 1152

【opencv3 学习记录】第二章 读取显示保存视频

一:捕获视频函数 1.函数:cv2.VideoCapture(参数) 2.参数说明: (1)开启摄像头:参数一般为0,你可以通过设置成 1 或 者其他的来选择别的摄像头。 (2)从文件夹中获取视频:参数为字符串形式的文件路径 3.示例: cap = cv2.VideoCapture(0) #cap:存放参数 二:读取视频函数 1.函数:cap.read() 2.函数说明: (1)cap.read 中cap与捕获视频函数存放函数一致,可以自己命名.括号一般不用填写 (2)ret,f

m0_64448543的博客 3272

探讨微软ASP.NET AJAX控件开发技术

本系列文章将通过具体的实例从客户端和服务端两个角度全面探讨ASP.NET AJAX框架中的控件(Control)开发所涉及的技术。客户端 一、 简介  如今,ASP.NET AJAX框架以其与ASP.NET 2.0系统的有机整合与完全面向对象的客户端JavaScript组件模型正在吸引着越来越多的Web开发人员。此外,这个框架还为基于ASP.NET 2.0平台的AJAX Web开发提供

这里有你的需要,就有我的幸福 1029

中山大学_数据科学与计算机_预推免

前言 2019 年 9 月中旬是中山大学预推免时间,本人没能进到夏令营,但是最后在预推免上岸也算不幸中的万幸。 记忆不一定准确,但希望能帮到他人。 想看 流程 的可以直接看总结,正文部分有本人心路历程。 预推免 中山大学的预推免大致可以分为 报道,机试,面试 三大部分,而且尤其是面试,所有人加起来总时长 3 天,幸运的是,本人被安排在第一天的下午第一场,上午就是机试,报道,机试,面试,无缝衔接。 ...

一把健 5208

ASP.NET AJAX UpdatePanel 控件实现剖析

使用ASP.NET AJAX框架我们可以搭建快速响应、具有丰富的用户体验的AJAX Web应用程序,而该框架的UpdatePanel控件则提供了一种非常简单的方式来实现Web页面的局部更新,我们不需要在每次回发的时候都加载整个页面。 那这个控件是如何实现这种局部刷新的哪,透过其实现机制我们可以更清楚其优缺点,便于我们确定其使用场合。本文将重点阐述ASP.NET AJAX控件Upd...

228

kettle实验十一:没有数据流入时停止操作

【实验目的】 1.利用Kettle的“阻塞数据直到步骤都完成”,“检测空流”,“中止”等组件,实现Kettle转换流程的控制。 2.熟练掌握“阻塞数据直到步骤都完成”,“检测空流”,“中止”等组件的使用,实现Kettle转换流程的控制。 【实验原理】 “检测空流”组件可以检测所在转换的输入数据,如果整个转换没有输入数据,通过“中止”组件终止整个转换的流程。在存在数据输入的情况,为了能让数据输出,需要和“阻塞数据直到步骤都完成”配合使用。当所有数据都已经从上个步骤“字段选择”读取完毕后,通过“阻塞数据直到步骤

weixin_44727274的博客 3848

17、扩展景深成像的瞳孔函数工程技术解析

本文详细解析了扩展景深成像的关键技术,包括基于焦距堆栈的数字处理方法、立方相位掩模的光学设计、对数非球面透镜的应用以及旋转点扩散函数的深度编码功能。通过实验验证和实际应用分析,展示了这些技术在显微镜成像、工业检测和医疗影像中的广泛用途及优势。同时探讨了未来发展方向,如智能算法优化、新型光学材料和多模态成像技术,为相关领域的技术创新提供了参考。

y2z3a4b5c的博客 168

DotNetTextBox V2.0 Web Control(ASP.NET2.0 增强型TextBox控件,完全支持AJAX.NET)

[控件界面][控件介绍]名称:DotNetTextBox V2.0 Web Control 免费无限制版类型:ASP.NET2.0 增强型TextBox控件作者: 小宝.NET2.0主页:http://www.aspxcn.com.cn演示页面: http://www.aspxcn.cn.NET2.0技术讨论QQ群:12462711、15532207功能:1.功能强大的

johncools的博客 1530

13、数据可视化与分组操作:Danfo.js 实战指南

本文深入介绍了如何使用 Danfo.js 进行数据可视化与分组操作。内容涵盖多种图表的创建与配置,如折线图、散点图、箱线图、小提琴图、直方图和柱状图,并结合 Plotly.js 实现丰富的交互式可视化效果。同时,详细讲解了数据聚合的‘分割-应用-组合’模式,包括分组数据、遍历分组、apply 方法及 agg 聚合操作,帮助开发者高效处理和分析结构化数据。适用于 Dnotebook、HTML 及主流前端框架的应用场景。

o1p2q3r的博客 98

WebCast《实战ASP.NET AJAX(1):使用服务器端框架增强现有ASP.NET应用程序》相关资源...

本课程从一个现有的ASP.NET应用程序入手(微软公司的官方示例——Job Starter Kit),演示使用ASP.NET AJAX服务器端框架/控件为其添加流行的Ajax功能的方法。适合于开发者学习处理遗留系统,或是为新系统添加简单、部分Ajax功能,并能让其对ASP.NET AJAX服务器端框架融会贯通。 观看录像:(coming soon...) 下载PPT:ASPNETAJAX_IN_...

weixin_34378767的博客 102

诊断测试工具CANoe.DiVa从入门到精通系列——开门见山

### 工具主要用于测试ECU的诊断功能。关于自动化诊断测试可以分为如下内容: ### -> 1、根据诊断需求规范进行cdd文件的编辑(现阶段主要是诊断问卷调查表); ### -> 2、新建Diva工程,导入对应的诊断数据库文件生成测试用例; ### -> 3、新建CANoe工程,导入CANoe.DiVa生成的Diva工程; ### -> 4、根据测试报告进行错误处理。

Soly_kun的博客 3546

Arcgis中的模型构建器(ModelBuilder)技术之批量图层转KML

这段时间全省各地都在开展耕地流出图斑整改恢复工作,期间或多或少都需要村委会协助摸排举证,除了举证软件外,奥维、外业精灵等软件想必大家接触得也很多。这就经常需要我们转kmz文件给业主或者摸排人员,那么有没有什么方法在arcgis下快速批量转kmz文件呢,今天就介绍一下如何在模型构建器(ModelBuilder)构建批量图层转KML的模型。

weixin_44671081的博客 1324

[翻译]Hello ASP.NET AJAX

原文地址:http://www.dotnetbips.com/articles/displayarticledetails.aspx?articleid=524[原文源码下载]Hello ASP.NET AJAX原文发布日期:2006.11.24作者:Bipin Joshi翻译:webabcd介绍在2005年9月我写了关于在asp.net 2.0里使用ajax的5篇系列文章。那几篇文章告诉

johncools的博客 2191

OpenClaw用户必看:每天0成本使用OpenClaw!NVIDIA NIM免费大模型接入教程

🚀 OpenClaw接入NVIDIA NIM免费API!glm5、minimax-m2.5等大量模型任选,0成本升级AI助手!💰

XiaoqiangClub的博客 5575
上一篇: ASP.NET 2.0 Ajax Beta 2 发布说明
下一篇: UML类图详解
JavaK
博客等级 码龄22年 18粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值