置顶:MOSS SP1开始支持AJAX。首先确认你的MOSS版本号
想必开发过MOSS AJAX控件的都知道,为了实现AJAX,必须对MOSS的环境进行大量的设置。网上有大量此类的文章,其中最流行的做法应该是刊登在moss开发团队blog上的(点击下面的URL进入)。
(http://blogs.msdn.com/sharepoint/archive/2007/03/02/integrating-asp-net-ajax-with-sharepoint.aspx)
简单概括一下步骤的话:
1. 下载并安装ASP.NET AJAX( http://www.asp.net/ajax/)
2. 扩展web.config使其支持ASP.NET AJAX
3. 在master pager上添加ASP.NET AJAX Script Manager
算得上是官方推荐的做法吧,只是有点麻烦,好在对MOSS进行AJAX扩展的人越来越多,网上出现了很多简便的做法,下面是鄙人的心得
1. 下载并安装ASP.NET AJAX
2. 下载并安装stsadm.ajaxifymoss自动配置web.config
3. Webparts的OnInit事件里添加ASP.NET AJAX Script Manager
接下来对各个步骤进行介绍
1 下载并安装ASP.NET AJAX( http://www.asp.net/ajax/)
推荐安装ASP.NET AJAX Extensions 1.0版本。
2 下载并安装stsadm.ajaxifymoss自动配置web.config
(http://www.codeplex.com/ajaxifymoss/Release/ProjectReleases.aspx?ReleaseId=13360)
2.1 下载StsAdm.AjaxifyMoss.zip并解压,执行deploy.cmd后执行upgrade.cmd(StsAdm.AjaxifyMoss.zip必须在同一个文件夹内)
2.2 启动dos命令栏窗口(cmd),使用stsadm运行ajaxifying(默认在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN)
全部命令如下
功能 | 使用例 |
add asp.net ajax to web.config | stsadm -o addajax -url http://your.moss.webapplication |
remove asp.net ajax from web.config | stsadm -o removeajax -url http://your.moss.webapplication |
add .Net 3.5 ajax to web.config | stsadm -o addajax35 -url http://your.moss.webapplication |
remove .Net 3.5 ajax from web.config | stsadm -o removeajax35 -url http://your.moss.webapplication |
3 Webparts的OnInit事件里添加ASP.NET AJAX Script Manager(参考示例代码)
4 运行示例代码(不要忘记添加System.Web.Extensions)
(如果运行成功并且不发生全页面刷新现象,那么就说明配置成功。WebParts开发使用Visual Studio 2005 Extensions, Version 1.1,2008请使用V1.2)
using System;
using System.Collections;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI;
using System.Runtime.InteropServices;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
namespace UsesUpdatePanel
{
[Guid("4e393abc-cc9c-4182-8d32-a742f6ace07b")]
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);
}
}
}