이 글의 정보는 여러 출처에서 수집되었기 때문에 모두 나열할 수는 없습니다. 콘텐츠는 개인 지식 관리 전용입니다.
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 기술을 사용하려면 몇 가지 특별한 배포 단계가 필요했습니다.
참고:
웹파트에서 UpdatePanel 사용에는 제한 사항이 있습니다. 자세한 내용은 ASP.NET AJAX 설명서를 확인하세요. UpdatePanel에서 모든 컨트롤을 사용할 수 있는 것은 아닙니다.
출력 캐싱이 활성화된 경우 ASP.NET AJAX를 사용할 수 없으며 오류가 발생합니다. 성능과 적시성 사이의 전형적인 모순입니다.
SharePoint에서 Microsoft ASP.NET AJAX 1.0 기술을 사용할 때의 이점:
완전한 클라이언트 스크립트 리소스 라이브러리를 구성할 수 있으며 일부 재사용 가능한 구성 요소를 축적할 수 있습니다.
당사의 웹 서비스 데이터는 JSON을 사용하여 표시할 수 있으며 결과는 JavaScript/Ajax 애플리케이션에서 쉽게 사용할 수 있습니다.
확장 기능을 사용하여 WebParts를 구축하면 자동 완성 기능이 있는 텍스트 상자와 같은 고도의 대화형 스타일을 제공할 수 있습니다.
WebPart에서 UpdatePanel을 사용하면 콜백 없는 상호 작용을 달성하고 페이지 새로 고침 횟수를 줄일 수 있습니다.
다음은 Microsoft ASP.NET AJAX 1.0 기술을 사용하는 구성 요소를 배포하기 전의 환경 준비 단계입니다. (새로 설치된 환경에서는 한 번만 배포하면 되며, 나중에 Webpart를 추가할 필요가 없습니다.)
웹 서버 팜에 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
<configSections> 태그에 <sectionGroup> 요소를 추가합니다: <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"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>
</configSections>
<system.web>/<pages> 태그 내에 <controls> 섹션의 내용을 추가합니다. <페이지>
<컨트롤>
<add tagPrefix="asp" 네임스페이스="System.Web.UI" 어셈블리="System.Web.Extensions, 버전=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>
</페이지>
<compilation> 태그 내의 <assemblies> 태그 내에 다음 콘텐츠를 추가합니다. <assemblies>
<추가 어셈블리="System.Web.Extensions, 버전=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</어셈블리>
<httpHandlers> 섹션에 다음 콘텐츠를 추가합니다. <httpHandlers>
<add verb="*" path="*.asmx" verify="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken= 31bf3856ad364e35"/>
<add verb="*" path="*_AppService.axd" verify="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" verify=" 거짓"/>
</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" />
</SafeControls>
마지막으로 web.config 파일 끝부분, 닫는 <configuration> 태그 바로 앞에 다음 구성 태그를 추가합니다.
<system.web.extensions>
<스크립팅>
<웹서비스>
<!-- 인증 서비스를 활성화하려면 이 줄의 주석 처리를 제거하세요. 해당되는 경우 requireSSL="true"를 포함하세요.
<!--
<authenticationService 활성화="true" requireSSL = "true|false"/>
-->
<!-- 프로필 서비스를 활성화하려면 이 줄의 주석 처리를 제거하여 ASP.NET AJAX 응용 프로그램에서 프로필 속성을 검색하고 수정할 수 있도록 하려면 readAccessProperties 및 writeAccessProperties 특성에 각 속성 이름을 추가해야 합니다.
<!--
<profileService 활성화="true"
readAccessProperties="속성 이름1,속성 이름2"
writeAccessProperties="속성 이름1,속성 이름2" />
-->
</webServices>
<!--
<scriptResourceHandler 활성화Compression="true" 활성화Caching="true" />
-->
</스크립팅>
</system.web.extensions>
<시스템.웹서버>
<검증 유효성 검사IntegratedModeConfiguration="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, 버전=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, 문화=중립, 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.드로잉 사용;
다음은 AjaxBaseWebPart 클래스의 구현 부분입니다.
/// <요약>
/// WSS 내에서 ASP.net Ajax 확장을 사용하는 데 필요한 모든 기능을 구현하는 기본 클래스
/// </summary>
[XmlRoot(네임스페이스 = "Deps.AjaxBaseWebpart")]
공용 추상 클래스 AjaxBaseWebpart : Microsoft.SharePoint.WebPartPages.WebPart
{
/*
* 이 기본 웹 파트 뒤에 있는 아이디어와 코드는 다음 Erics 블로그 게시물에서 가져왔습니다.
* http://www.capdes.com/2007/02/ajaxbasepart_easy_aspnet_20_aj.html
* 기본적으로 ScriptManager의 유무와 구성을 관리합니다.
* 포스트백을 처리하기 위해 ASP.net ajax 확장에 필요합니다. 이 웹 파트에도 포함되어 있습니다.
* 오류를 처리하는 일반적인 방법입니다.
*/
#지역 선언
개인 문자열 _ValidationGroupId;
개인 유효성 검사 요약 _ErrorContainer;
개인 ScriptManager _AjaxManager;
#endregion
#region 생성자
공개 AjaxBaseWebpart()
{
}
#endregion
#region 메소드
/// <요약>
/// 현재 웹 파트의 사용자에게 오류를 표시하는 일반적인 방법을 제공하는 데 사용됩니다.
/// </summary>
/// <param name="message">발생한 오류에 대한 설명</param>
공개 무효 RegisterError(문자열 메시지)
{
if (this.Controls.Contains(_ErrorContainer))
{
//고유한 컨트롤 ID를 생성하는 이 방법은 일부 OOB 웹 파트에서 사용됩니다.
int UniqueCounter;
if (HttpContext.Current.Items["GetUniqueControlId"] != null)
{
UniqueCounter = (int)HttpContext.Current.Items["GetUniqueControlId"];
}
또 다른
{
고유카운터 = 0;
}
고유카운터++;
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 = 거짓;
cv.ErrorMessage = 메시지;
this.Controls.Add(cv);
}
또 다른
{
//AjaxBasePart에서 CreateChildControls 재정의 전에 RegisterError가 호출된 경우 SPUtility를 사용하여 사용자를 오류 페이지로 전송합니다.
SPUtility.TransferToErrorPage("AjaxBasePart의 CreateChildControls 함수가 호출되지 않았습니다. CreateChildControls 재정의 상단에 "base.CreateChildControls()"를 추가해야 할 수도 있습니다.");
}
}
/// <요약>
/// ValidationSummary 컨트롤이 페이지에 등록되었는지 확인하기 위해 호출해야 합니다. 모든 하위 웹 파트에는 자체 CreateChildControls 재정의 상단에 base.CreateChildControls()가 있어야 합니다.
/// </summary>
보호된 재정의 void CreateChildControls()
{
base.CreateChildControls();
if (!this.Controls.Contains(_ErrorContainer))
{
_ValidationGroupId = Guid.NewGuid().ToString();
_ErrorContainer = new 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를 지원하는 데 필요한 페이지 수정이 여기에서 수행됩니다.
/// </summary>
보호된 재정의 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)
{
string formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"];
if (!string.IsNullOrEmpty(formOnSubmitAtt) && formOnSubmitAtt == "return _spFormOnSubmitWrapper();")
{
this.Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";
}
//Page.Form의 첫 번째 컨트롤로 ScriptManager를 추가합니다.
//이것이 실제로 중요하다고 생각하지 않지만 선언적으로 사용될 때 ScriptManager를 배치하는 방법과 일관되도록 했습니다.
this.Page.Form.Controls.AddAt(0, _AjaxManager);
}
}
}
#endregion
#region 속성
/// <요약>
/// 페이지의 스크립트 관리자를 노출합니다. 값은 OnInit 이후까지 설정되지 않습니다.
/// </summary>
[WebPartStorage(Storage.None)]
공개 ScriptManager AjaxManager
{
get { return _AjaxManager };
설정 { _AjaxManager = 값 }
}
#endregion
}
개발 중에 이 WebPart를 상속하는 한 UpdatePanel을 추가하고 여기에 다른 컨트롤을 추가할 수 있습니다.