この記事に記載されている情報は多くの情報源から収集されているため、すべてをリストすることはできません。コンテンツは個人の知識管理のみを目的としています。
Windows SharePoint Services v3 は ASP.NET 2.0 上に構築されています。 Microsoft ASP.NET AJAX 1.0 は MOSS の後にリリースされたため、ASP.NET AJAX と SharePoint の間に互換性の問題が発生する場合がありますが、これは Windows SharePoint Services SP1 で解決される予定です。これまでは、SharePoint で ASP.NET AJAX テクノロジを使用するには、いくつかの特別な展開手順が必要でした。
注:
Web パーツでの UpdatePanel の使用には制限があります。詳細については、ASP.NET AJAX のドキュメントを確認してください。 UpdatePanel ではすべてのコントロールを使用できるわけではありません。
出力キャッシュが有効になっている場合、ASP.NET AJAX を使用できないか、エラーが発生します。パフォーマンスと適時性の間の典型的な矛盾。
SharePoint で Microsoft ASP.NET AJAX 1.0 テクノロジを使用する利点:
完全なクライアント スクリプト リソース ライブラリを形成し、いくつかの再利用可能なコンポーネントを蓄積できます。
Web サービス データは JSON を使用して表示でき、その結果は JavaScript/Ajax アプリケーションで簡単に使用できます。
拡張機能のテクノロジを使用して Web パーツを構築すると、オートコンプリート機能を備えたテキストボックスなど、高度にインタラクティブなスタイルを提供できます。
WebPart で UpdatePanel を使用すると、コールバックのない対話を実現し、ページの更新数を削減できます。
Microsoft ASP.NET AJAX 1.0 テクノロジを使用するコンポーネントを展開する前の環境準備手順を次に示します。 (新しくインストールした環境に一度展開するだけでよく、後で Webpart を追加する必要はありません)
Web サーバー ファームに ASP.NET AJAX をダウンロードしてインストールします。
まず、「ASP.NET 2.0 AJAX Extensions 1.0」をインストールする必要があります。これは、ajax.asp .net ダウンロードからダウンロードできます。
Microsoft ASP.NET AJAX 1.0用のSharePoint web.configの拡張
Ajax 用にいくつかの特定のエントリを登録する必要があります。 SharePoint web.config ファイルを編集します。このファイルは通常、次のディレクトリにあります。
c:inetpubwwwrootwssvirtualdirectories80
<sectionGroup> 要素を <configSections> タグに追加します: <configSections>
<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" allowedDefinition="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" allowedDefinition="MachineToApplication" />
</セクショングループ>
</セクショングループ>
</セクショングループ>
</configセクション>
<system.web>/<pages> タグ内に <controls> セクションの内容を追加します。 <ページ>
<コントロール>
<add tagPrefix="asp" namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</コントロール>
</ページ>
<compilation> タグ内の <assemblies> タグ内に次のコンテンツを追加します: <assemblies>
<add Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</アセンブリ>
<httpHandlers> セクションに次のコンテンツを追加します: <httpHandlers>
<addverb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory、System.Web.Extensions、Version=1.0.61025.0、Culture=neutral、PublicKeyToken= 31bf3856ad364e35"/>
<addverb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory、System.Web.Extensions、Version=1.0.61025.0、Culture=neutral、PublicKeyToken =31bf3856ad364e35"/>
<addverb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler、System.Web.Extensions、Version=1.0.61025.0、Culture=neutral、PublicKeyToken=31bf3856ad364e35" validate=偽"/>
</httpハンドラー>
HttpModules セクションの既存のすべての登録コンテンツ <httpModules> の下に、次の登録コンテンツを追加します。
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpモジュール>
<SharePoint>/<SafeControls> セクションで、Microsoft Ajax Extensions の System.Web.UI 名前空間の SafeControl を追加します。 <セーフコントロール>
<SafeControl Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TypeName="*" Safe="True" />
</セーフコントロール>
最後に、次の構成タグを web.config ファイルの末尾、<configuration> 終了タグの直前に追加します。
<system.web.extensions>
<スクリプト>
<ウェブサービス>
<!-- 必要に応じて、この行のコメントを解除して、requireSSL="true" を含めます。
<!--
<authenticationService available="true" requireSSL = "true|false"/>
-->
<!-- これらの行のコメントを解除して、ASP.NET AJAX アプリケーションでプロファイル プロパティを取得および変更できるようにするには、各プロパティ名を readAccessProperties 属性と writeAccessProperties 属性に追加する必要があります。
<!--
<profileServiceenabled="true"
readAccessProperties="プロパティ名1,プロパティ名2"
writeAccessProperties="プロパティ名1,プロパティ名2" />
-->
</webサービス>
<!--
<scriptResourceHandler enableCompression="true" enableCaching="true" />
-->
</スクリプト>
</system.web.extensions>
<システム.ウェブサーバー>
<検証 validateIntegratedModeConfiguration="false"/>
<モジュール>
<add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</モジュール>
<ハンドラー>
<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" verify="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=中立、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 =中立、PublicKeyToken=31bf3856ad364e35" />
</ハンドラー>
</system.webServer>
AjaxBaseWebPart を使用して開発する
この拡張機能を使用する WebPart を作成する最も簡単な方法は、他の人が作成した AjaxBaseWebPart を直接継承することです。以下は私が使用しているものです。別のものを使用したり、自分で作成したりすることもできます。
名前空間参照部分は次のとおりです。
システムを使用する;
System.Collections.Generic を使用します。
System.Text を使用します。
System.Web を使用します。
System.Web.UI.WebControls.WebParts を使用します。
System.Xml.Serialization を使用します。
System.Web.UI を使用します。
Microsoft.SharePoint.WebPartPages を使用します。
Microsoft.SharePoint.Utilities を使用します。
System.Web.UI.WebControls を使用します。
System.Drawing を使用します。
以下は、AjaxBaseWebPart クラスの実装部分です。
/// <概要>
/// WSS 内で ASP.net Ajax 拡張機能を使用するために必要なすべての機能を実装する基本クラス
/// </概要>
[XmlRoot(Namespace = "Deps.AjaxBaseWebpart")]
パブリック抽象クラス AjaxBaseWebpart : Microsoft.SharePoint.WebPartPages.WebPart
{
/*
* この基本 Web パーツの背後にあるアイデアとコードは、次の Erics ブログ投稿から引用されました。
* http://www.capdes.com/2007/02/ajaxbasepart_easy_aspnet_20_aj.html
* これは基本的に ScriptManager の存在と構成を管理します
* これは、ポストバックを処理するために ASP.net Ajax 拡張機能で必要です。この Web パーツにも含まれています。
* エラーを処理するための一般的な方法。
*/
#region 宣言
プライベート文字列 _ValidationGroupId;
プライベート Validationsummary _ErrorContainer;
プライベート ScriptManager _AjaxManager;
#endregion
#region コンストラクター
public AjaxBaseWebpart()
{
}
#endregion
#region メソッド
/// <概要>
/// 現在の Web パーツのユーザーにエラーを表示する一般的な方法を提供するために使用されます。
/// </概要>
/// <param name="message">発生したエラーの説明。</param>
public void RegisterError(文字列メッセージ)
{
if (this.Controls.Contains(_ErrorContainer))
{
//一意のコントロール ID を生成するこの方法は、一部の OOB Web パーツで使用されます
int uniqueCounter;
if (HttpContext.Current.Items["GetUniqueControlId"] != null)
{
uniqueCounter = (int)HttpContext.Current.Items["GetUniqueControlId"];
}
それ以外
{
uniqueCounter = 0;
}
uniqueCounter++;
HttpContext.Current.Items["GetUniqueControlId"] = uniqueCounter;
// 現在のエラー メッセージを Validationsummary コントロールに登録するカスタム バリデータを作成します。
CustomValidator cv = new CustomValidator();
cv.ID = string.Concat("_Error_", uniqueCounter);
cv.ValidationGroup = _ValidationGroupId;
cv.Display = ValidatorDisplay.None;
cv.IsValid = false;
cv.ErrorMessage = メッセージ
this.Controls.Add(cv);
}
それ以外
{
//AjaxBasePart で CreateChildControls オーバーライドの前に RegisterError が呼び出された場合は、SPUtility を使用してユーザーをエラー ページに転送します
SPUtility.TransferToErrorPage("AjaxBasePart の CreateChildControls 関数が呼び出されていません。おそらく、CreateChildControls オーバーライドの先頭に "base.CreateChildControls()" を追加する必要があります。");
}
}
/// <概要>
/// Validationsummary コントロールがページに登録されていることを確認するために呼び出す必要があります。すべての子 Web パーツには、独自の CreateChildControls オーバーライドの先頭に Base.CreateChildControls() が必要です。
/// </概要>
保護されたオーバーライド void CreateChildControls()
{
Base.CreateChildControls();
if (!this.Controls.Contains(_ErrorContainer))
{
_ValidationGroupId = Guid.NewGuid().ToString();
_ErrorContainer = 新しい Validationsummary();
_ErrorContainer.ID = "_ErrorContainer";
_ErrorContainer.ValidationGroup = _ValidationGroupId;
_ErrorContainer.BorderStyle = BorderStyle.Solid;
_ErrorContainer.BorderWidth = Unit.Pixel(3);
_ErrorContainer.BorderColor = Color.Red;
this.Controls.Add(_ErrorContainer);
}
}
#endregion
#region イベント
/// <概要>
/// ページの読み込み前に Oninit が起動され、Ajax をサポートするために必要なページの変更がここで行われます。
/// </概要>
protected オーバーライド void OnInit(EventArgs e)
{
Base.OnInit(e);
// ページ上に存在する場合は既存の ScriptManager を取得します。
_AjaxManager = ScriptManager.GetCurrent(this.Page)
if (_AjaxManager == null);
{
// 新しい ScriptManager を作成し、EnablePartialRendering
_AjaxManager = 新しい ScriptManager();
_AjaxManager.EnablePartialRendering = true;
// ポストバックとフォーム アクションの問題を修正 (DevDiv 55525)
Page.ClientScript.RegisterStartupScript(typeof(AjaxBaseWebpart), this.ID, "_spOriginalFormAction = document.forms[0].action;", true);
//tag:"form" att:"onsubmit" val:"return _spFormOnSubmitWrapper( )" は最初のポストバック以降の非同期ポストバックをブロックします
//「_spFormOnSubmitWrapper()」を呼び出さないと、すべてのポストバックが中断されます
//常に true を返すと、反復的なポストバックをブロックするという _spFormOnSubmitWrapper() の目的が多少損なわれますが、MS AJAX 拡張機能が適切に動作できるようになります。
//これは最小限の効果しか期待できないハックです
if (this.Page.Form != null)
{
文字列 formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"];
if (!string.IsNullOrEmpty(formOnSubmitAtt) && formOnSubmitAtt == "return _spFormOnSubmitWrapper();")
{
this.Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";
}
// ScriptManager を Page.Form の最初のコントロールとして追加します
//これは実際には重要ではないと思いますが、宣言的に使用される場合の ScriptManager の配置方法との一貫性を保つためにこのようにしました
this.Page.Form.Controls.AddAt(0, _AjaxManager);
}
}
}
#endregion
#region プロパティ
/// <概要>
/// ページのスクリプト マネージャーを公開します。値は OnInit の後まで設定されません。
/// </概要>
[WebPartStorage(Storage.None)]
パブリック ScriptManager AjaxManager
{
get { return _AjaxManager }
セット { _AjaxManager = 値 }
}
#エンドリージョン
}
開発中は、この WebPart を継承している限り、UpdatePanel を追加し、そこに他のコントロールを追加できます。