SharePoint 集成Ajax 的应用

 

SharePoint中集成Ajax的功能并不复杂,只需要8个步骤即可。第一个是安装Ajax的支持,剩下七个则是修改需要提供Ajax支持的网站的web.config文件即可。

1.安装ASP.NET AJAX Extensions 1.0。也可以用3.5的dll.不过<add assembly="System.Web.Extensions, Version=1.0.61025.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>要根据assembly里的最新的System.Web.Extensions。我用

<SafeControl Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TypeName="*" Safe="True" />。可行。

2.打开SharePoint网站集所在的WebApplication的目录。例如:C:"inetpub"wwwroot"wss"virtualdirectories"80。并打开目录中的web.config文件。这里我推荐使用VS来编辑这个文件,理由是不容易出错,如果设置有错误则会有红色下划线的职能提示,而且有自动缩进,保证格式。在记事本里面却不能保证这些。

3.在<configSections>标记中添加如下的<sectionGroup>元素。

<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
 <
sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
     <
section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
     <
sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
     <
section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
     <
section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
     <
section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
   </
sectionGroup>
 </
sectionGroup>
</
sectionGroup>

4.在<system.web>/<pages>标记中添加<controls>部分。

<controls>
   <
add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</
controls>

5.在<compilation>标记的<assemblies>元素中添加如下标记。

<add assembly="System.Web.Extensions, Version=1.0.61025.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

6.在<httpHandlers>部分的最后注册HTTP Handlers

<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<
add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<
add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>

7.在<httpModules>部分中所有module之后添加注册下面的HTTP Module

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

8.在<SharePoint>/<SafeControls>中为System.Web.Extensions组件添加SafeControl

<SafeControl Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TypeName="*" Safe="True" />

9.最后,在<configuration>标记内的最低部(仅在</configuration>之前),添加如下内容。

<system.web.extensions>
   <
scripting>
     <
webServices>
     
<!-- Uncomment this line to enable the authentication service. Include requireSSL="true" if appropriate. -->
     <!--
       <authenticationService enabled="true" requireSSL = "true|false"/>
     -->
     <!-- Uncomment these lines to enable the profile service. To allow profile properties to be retrieved and modified in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and writeAccessProperties attributes. -->
     <!--
     <profileService enabled="true"
                     readAccessProperties="propertyname1,propertyname2"
                     writeAccessProperties="propertyname1,propertyname2" />
     -->
     
</webServices>
     
<!--
     <scriptResourceHandler enableCompression="true" enableCaching="true" />
     -->
   
</scripting>
   </
system.web.extensions>
   <
system.webServer>
   <
validation validateIntegratedModeConfiguration="false"/>
   <
modules>
     <
add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>d
   
</modules>
   <
handlers>
     <
remove name="WebServiceHandlerFactory-Integrated" />
     <
add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
          
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
     <
add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
     <
add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
   </
handlers>
</
system.webServer>

完成。

 

 

 

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;

namespace WebPartForAjax
{
    [Guid("167a7058-cd16-4229-84ea-4da3bcb67858")]
    public class AjaxUpdatePanelPart : System.Web.UI.WebControls.WebParts.WebPart
    {


        private Label label;
        private TextBox textBox;
        private UpdatePanel up;
        private Button button;
        private ScriptManager _AjaxManager;

        //自定义一个ScriptManager用来存储获取的ScriptManager
        [WebPartStorage(Storage.None)]
        public ScriptManager AjaxManager
        {
            get { return _AjaxManager; }
            set { _AjaxManager = value; }
        }

 

        //页面初始化事件
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            //获取页面上的ScriptManager
            _AjaxManager = ScriptManager.GetCurrent(this.Page);
            //如果页面上没有ScriptManager时追加一个
            if (_AjaxManager == null)
            {
                _AjaxManager = new ScriptManager();
                _AjaxManager.EnablePartialRendering = true;

                Page.ClientScript.RegisterStartupScript(typeof(AjaxUpdatePanelPart),this.ID,"_spOriginalFormAction = document.forms[0].action;",true);

                if (this.Page.Form != null)
                {
                    string formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"];
                    if (!string.IsNullOrEmpty(formOnSubmitAtt) && formOnSubmitAtt == "return _spFormOnSubmitWrapper();")
                    {
                        this.Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";
                    }
                    this.Page.Form.Controls.AddAt(0, _AjaxManager);
                }
            }
        }

        //创建各个控件,并填充UpdatePanel
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            this.EnsureUpdatePanelFixups();

            up = new UpdatePanel();
            up.ID = "UpdatePanel1";
            up.ChildrenAsTriggers = true;
            up.RenderMode = UpdatePanelRenderMode.Inline;
            up.UpdateMode = UpdatePanelUpdateMode.Always;

            this.textBox = new TextBox();
            this.textBox.ID = "TextBox";
            up.ContentTemplateContainer.Controls.Add(this.textBox);

            this.label = new Label();
            this.label.Text = "Enter your name.";
            up.ContentTemplateContainer.Controls.Add(this.label);

            this.button = new Button();
            button.CausesValidation = false;
            button.ID = "Button1";
            button.Text = "Say Hello";
            button.Click += new EventHandler(HandleButtonClick);
            up.ContentTemplateContainer.Controls.Add(this.button);
            _AjaxManager.RegisterAsyncPostBackControl(this.button);

            this.Controls.Add(up);
        }

        private void HandleButtonClick(object sender, EventArgs eventArgs)
        {
            this.label.Text = "Hello " + this.textBox.Text;
        }


        /*在MOSS中,为了正确解析某些特殊的URLs,例如包含汉字等两比特字符的URL,

         * Windows SharePoint Services JavaScript使用form onSubmit wrapper重载默认的form action,

         * 下面这个方法用来恢复默认的form action,如果你的URL里不包含汉字等双字节的字符,

         * 那么,恭喜,你可以使用ASP.NET AJAX UpdatePanels

         * (具体请参考上文中提到的「moss开发团队blog」) */

        private void EnsureUpdatePanelFixups()
        {
            if (this.Page.Form != null)
            {
                string formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"];
                if (formOnSubmitAtt == "return _spFormOnSubmitWrapper();")
                {
                    this.Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";
                }
            }

            ScriptManager.RegisterStartupScript(this,typeof(AjaxUpdatePanelPart),"UpdatePanelFixup","_spOriginalFormAction = document.forms[0].action; _spSuppressFormOnSubmitWrapper=true;",true);
        }
    }
}

posted @ 2010-03-18 20:30  StarWang  阅读(281)  评论(0编辑  收藏  举报