天天看点

在MOSS中使用.Net3.5中的Ajax功能

网上有很多文章介绍如何在MOSS中使用Ajax1.0的框架。其实自从.net3.5推出之后,在.net3.5中已经自带了Ajax的功能。本文主要介绍如何在VS2005中使用.net3.5中的Ajax功能,以及如何在MOSS中使用.net3.5中的Ajax功能。

首先肯定需要下载一个.net3.5,这个网上有很多。

下面就主要介绍一些和Ajax1.0在使用和配置方面有差别的地方,至于.net3.5中Ajax的具体使用和Ajax1.0是差不多的,园子里也有很多的介绍文章。

一、在VS2005中使用

以前Ajax1.0的时候可以下载一个VS2005的插件,安装好之后会多出一个特定的Ajax的项目,创建这种类型的项目就可以使用Ajax1.0的功能了。

这个插件主要做了两件事:

1、在网站的web.config中加入了一些配置项。

在.net3.5的时候我们可以手工在web.config中加入Ajax的配置:

在MOSS中使用.Net3.5中的Ajax功能

      <httpHandlers>

在MOSS中使用.Net3.5中的Ajax功能

        <remove verb="*" path="*.asmx"/>

在MOSS中使用.Net3.5中的Ajax功能

        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

在MOSS中使用.Net3.5中的Ajax功能

        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

在MOSS中使用.Net3.5中的Ajax功能

        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>

在MOSS中使用.Net3.5中的Ajax功能

      </httpHandlers>     

在MOSS中使用.Net3.5中的Ajax功能

      <httpModules>

在MOSS中使用.Net3.5中的Ajax功能

        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

在MOSS中使用.Net3.5中的Ajax功能

      </httpModules>

在MOSS中使用.Net3.5中的Ajax功能

从配置上看相对Ajax1.0的时候,更加简单了,而且使用的也是.net比较规范的方法,通过注册一些httphandle和httpmodule来捕获特定的Ajax的请求达到异步刷新的效果。

2、在工具箱中加入Ajax的控件

我们也可以手工在VS2005的工具箱上-〉右键-〉选择项....,然后在".net framework组件"的tab中选择所有程序集名称为System.Web.Extensions(3.5.0.0)的控件,插入就可以了。

加入之后就会在工具箱中看到相应的控件(当然只是一些基本的控件),然后就可以按照Ajax1.0的方法进行开发了。

二、在MOSS中使用.net3.5中的Ajax功能

1、修改配置

这一步和上面一样,将上面的配置加入对应MOSS站点的web.config文件中就可以了

2、在VS2005中编写Webpart

这个也是按照常规的方式编写webpart,在这个webpart中使用Ajax中的控件。但是自己的webpart要针对Ajax进行一些特殊处理。我这里参考网上的资料写了一个父类,可以直接从这个父类继承就可以了。

 1

在MOSS中使用.Net3.5中的Ajax功能

public abstract class AjaxBasePart : System.Web.UI.WebControls.WebParts.WebPart

 2

在MOSS中使用.Net3.5中的Ajax功能

{

 3

在MOSS中使用.Net3.5中的Ajax功能

    private ScriptManager _AjaxManager;

 4

在MOSS中使用.Net3.5中的Ajax功能

 5

在MOSS中使用.Net3.5中的Ajax功能

    public AjaxBasePart()

 6

在MOSS中使用.Net3.5中的Ajax功能

    {

 7

在MOSS中使用.Net3.5中的Ajax功能

    }

 8

在MOSS中使用.Net3.5中的Ajax功能

 9

在MOSS中使用.Net3.5中的Ajax功能

    protected override void OnInit(EventArgs e)

10

在MOSS中使用.Net3.5中的Ajax功能

11

在MOSS中使用.Net3.5中的Ajax功能

        base.OnInit(e);

12

在MOSS中使用.Net3.5中的Ajax功能

13

在MOSS中使用.Net3.5中的Ajax功能

        //取得存在的ScriptManager

14

在MOSS中使用.Net3.5中的Ajax功能

        _AjaxManager = ScriptManager.GetCurrent(this.Page);

15

在MOSS中使用.Net3.5中的Ajax功能

16

在MOSS中使用.Net3.5中的Ajax功能

        if (_AjaxManager == null)

17

在MOSS中使用.Net3.5中的Ajax功能

        {

18

在MOSS中使用.Net3.5中的Ajax功能

            //创建ScriptManager

19

在MOSS中使用.Net3.5中的Ajax功能

            _AjaxManager = new ScriptManager();

20

在MOSS中使用.Net3.5中的Ajax功能

            _AjaxManager.ID = this.ID + "$AjaxManager";

21

在MOSS中使用.Net3.5中的Ajax功能

            _AjaxManager.EnablePartialRendering = true;

22

在MOSS中使用.Net3.5中的Ajax功能

23

在MOSS中使用.Net3.5中的Ajax功能

            if (this.Page.Form != null)

24

在MOSS中使用.Net3.5中的Ajax功能

            {

25

在MOSS中使用.Net3.5中的Ajax功能

                //解决Ajax按钮只能执行一次的问题

26

在MOSS中使用.Net3.5中的Ajax功能

                string formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"];

27

在MOSS中使用.Net3.5中的Ajax功能

                if (!string.IsNullOrEmpty(formOnSubmitAtt) && formOnSubmitAtt == "return _spFormOnSubmitWrapper();")

28

在MOSS中使用.Net3.5中的Ajax功能

                {

29

在MOSS中使用.Net3.5中的Ajax功能

                    this.Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";

30

在MOSS中使用.Net3.5中的Ajax功能

                }

31

在MOSS中使用.Net3.5中的Ajax功能

32

在MOSS中使用.Net3.5中的Ajax功能

                this.Page.Form.Controls.AddAt(0, _AjaxManager);

33

在MOSS中使用.Net3.5中的Ajax功能

            }

34

在MOSS中使用.Net3.5中的Ajax功能

        }

35

在MOSS中使用.Net3.5中的Ajax功能

36

在MOSS中使用.Net3.5中的Ajax功能

}

最主要的代码有两处:

1、14行的地方取得ScriptManager对象,如果没有的话才创建,然后在32行的时候作为form的第一个控件插入。因为一个页面中只能出现一个ScriptManager对象

2、在26-30之间用来解决UpdatePanel中的按钮只能执行一次的情况。在MOSS中直接使用Ajax的控件时存在一些兼容性方面的问题,需要进行一些特殊处理。如果不加入这段代码,那么在UpdatePanel中出现的按钮只能点击一次,下次再点击的时候没有反应。

    本文转自永春博客园博客,原文链接:http://www.cnblogs.com/firstyi/archive/2008/04/26/1169963.html,如需转载请自行联系原作者