ข้อมูลในบทความนี้รวบรวมจากหลายแหล่ง ดังนั้นฉันจึงไม่สามารถแสดงรายการทั้งหมดได้ ต้องขออภัยมา ณ ที่นี้ เนื้อหามีไว้เพื่อการจัดการความรู้ส่วนบุคคลเท่านั้น
Windows SharePoint Services v3 สร้างขึ้นบน ASP.NET 2.0 Microsoft ASP.NET AJAX 1.0 เปิดตัวหลังจาก MOSS ดังนั้นในบางกรณี มีปัญหาความเข้ากันได้บางอย่างระหว่าง ASP.NET AJAX และ SharePoint ซึ่งจะได้รับการแก้ไขใน Windows SharePoint Services SP1 ก่อนหน้านี้ การใช้เทคโนโลยี ASP.NET AJAX ใน SharePoint จำเป็นต้องมีขั้นตอนการปรับใช้พิเศษบางประการ
หมายเหตุ:
มีข้อจำกัดในการใช้ UpdatePanel ใน webpart โปรดตรวจสอบเอกสาร ASP.NET AJAX เพื่อดูรายละเอียด ไม่สามารถใช้การควบคุมทั้งหมดได้ใน UpdatePanel
หากเปิดใช้งานแคชเอาต์พุต คุณจะไม่สามารถใช้ ASP.NET AJAX ไม่เช่นนั้นจะเกิดข้อผิดพลาด ความขัดแย้งแบบคลาสสิกระหว่างประสิทธิภาพและความทันเวลา
ประโยชน์ของการใช้เทคโนโลยี Microsoft ASP.NET AJAX 1.0 ใน SharePoint:
สามารถสร้างไลบรารีทรัพยากรสคริปต์ไคลเอ็นต์ที่สมบูรณ์ได้ และสามารถสะสมส่วนประกอบที่นำมาใช้ซ้ำได้บางส่วน
ข้อมูลบริการเว็บของเราสามารถแสดงได้โดยใช้ JSON และผลลัพธ์สามารถนำไปใช้ได้อย่างง่ายดายในแอปพลิเคชัน JavaScript/Ajax
การสร้าง WebParts โดยใช้เทคโนโลยีในส่วนขยายสามารถให้สไตล์ที่มีการโต้ตอบสูง เช่น กล่องข้อความที่มีฟังก์ชันเติมข้อความอัตโนมัติ
ใช้ UpdatePanel ใน WebPart เพื่อให้เกิดการโต้ตอบที่ไม่มีการเรียกกลับ และลดจำนวนการรีเฟรชเพจ
ต่อไปนี้เป็นขั้นตอนการเตรียมสภาพแวดล้อมก่อนที่จะปรับใช้ส่วนประกอบที่ใช้เทคโนโลยี Microsoft ASP.NET AJAX 1.0 (คุณจะต้องปรับใช้เพียงครั้งเดียวในสภาพแวดล้อมที่ติดตั้งใหม่ และคุณไม่จำเป็นต้องเพิ่ม Webpart ในภายหลัง)
ดาวน์โหลดและติดตั้ง ASP.NET AJAX บนเว็บเซิร์ฟเวอร์ฟาร์ม
ขั้นแรก คุณต้องติดตั้ง "ASP.NET 2.0 AJAX Extensions 1.0.0" " ซึ่งสามารถดาวน์โหลดได้จากการดาวน์โหลด ajax.asp .net
การขยาย SharePoint web.config สำหรับ Microsoft ASP.NET AJAX 1.0
เราจำเป็นต้องลงทะเบียนรายการเฉพาะบางรายการสำหรับ Ajax แก้ไขไฟล์ SharePoint web.config ซึ่งโดยปกติจะอยู่ในไดเรกทอรีต่อไปนี้:
c:inetpubwwwrootwssไดเรกทอรีเสมือน80
เพิ่มองค์ประกอบ <sectionGroup> ให้กับแท็ก <configSections>: <configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, วัฒนธรรม=เป็นกลาง, PublicKeyToken=31bf3856ad364e35">
<sectionGroup name = "scripting" type = "System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35">
<ชื่อส่วน = "scriptResourceHandler" type = "System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35" needPermission = "false" AllowDefinition = "MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, วัฒนธรรม=เป็นกลาง, PublicKeyToken=31bf3856ad364e35">
<ชื่อส่วน = "jsonSerialization" type = "System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35" needPermission = "false" AllowDefinition = "ทุกที่" />
<ชื่อส่วน = "profileService" type = "System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35" needPermission = "false" AllowDefinition = "MachineToApplication" / >
<ชื่อส่วน = "authenticationService" type = "System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35" needPermission = "false" AllowDefinition = "MachineToApplication" />
</ส่วนกลุ่ม>
</ส่วนกลุ่ม>
</ส่วนกลุ่ม>
</configSections>
เพิ่มเนื้อหาของส่วน <controls> ภายในแท็ก <system.web>/<pages> <หน้า>
<การควบคุม>
<เพิ่ม tagPrefix = "asp" namespace = "System.Web.UI" แอสเซมบลี = "System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35"/>
</การควบคุม>
</หน้า>
เพิ่มเนื้อหาต่อไปนี้ภายในแท็ก <assemblies> ภายในแท็ก <compilation>: <assemblies>
<เพิ่มแอสเซมบลี = "System.Web.Extensions รุ่น = 1.0.61025.0 วัฒนธรรม =เป็นกลาง PublicKeyToken = 31bf3856ad364e35"/>
</ชุดประกอบ>
เพิ่มเนื้อหาต่อไปนี้ในส่วน <httpHandlers>: <httpHandlers>
< เพิ่มกริยา = "*" path = "*.asmx" validate = "false" type = "System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35"/>
< เพิ่มกริยา = "*" path = "*_AppService.axd" validate = "false" type = "System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken =31bf3856ad364e35"/>
< เพิ่มกริยา = "GET, HEAD" path = "ScriptResource.axd" type = "System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35" validate = เท็จ"/>
</httpตัวจัดการ>
เพิ่มเนื้อหาการลงทะเบียนต่อไปนี้ในส่วน HttpModules ด้านล่างเนื้อหาการลงทะเบียนที่มีอยู่ทั้งหมด <httpModules>
< เพิ่มชื่อ = "ScriptModule" type = "System.Web.Handlers.ScriptModule, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35"/>
</httpโมดูล>
ในส่วน <SharePoint>/<SafeControls> ให้เพิ่ม SafeControl สำหรับเนมสเปซ System.Web.UI ของ Microsoft Ajax Extensions <การควบคุมแบบปลอดภัย>
<SafeControl Assembly = "System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35" Namespace = "System.Web.UI" TypeName = "*" Safe = "True" />
</การควบคุมที่ปลอดภัย>
สุดท้าย เพิ่มแท็กการกำหนดค่าต่อไปนี้ที่ส่วนท้ายของไฟล์ web.config ก่อนแท็กปิด <configuration>
<system.web.extensions>
<การเขียนสคริปต์>
<บริการเว็บ>
<!-- ยกเลิกหมายเหตุบรรทัดนี้เพื่อเปิดใช้งานบริการการตรวจสอบสิทธิ์ รวม needSSL="true" หากเหมาะสม
-
<authenticationService เปิดใช้งาน = "true" needSSL = "true|false"/>
-
<!-- ยกเลิกหมายเหตุบรรทัดเหล่านี้เพื่อเปิดใช้งานบริการโปรไฟล์ หากต้องการอนุญาตให้ดึงข้อมูลและแก้ไขคุณสมบัติโปรไฟล์ในแอปพลิเคชัน ASP.NET AJAX คุณต้องเพิ่มชื่อคุณสมบัติแต่ละรายการให้กับแอตทริบิวต์ readAccessProperties และ writeAccessProperties -->
-
<profileService เปิดใช้งาน = "จริง"
readAccessProperties = "propertyname1, propertyname2"
writeAccessProperties = "propertyname1, propertyname2" />
-
</บริการเว็บ>
-
<scriptResourceHandler EnableCompression = "true" EnableCaching = "true" />
-
</สคริปต์>
</system.web.extensions>
<system.webServer>
<การตรวจสอบ validateIntegratedModeConfiguration = "false"/>
<โมดูล>
< เพิ่มชื่อ = "ScriptModule" preCondition = "integratedMode" type = "System.Web.Handlers.ScriptModule, System.Web.Extensions, Version = 1.0.61025.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = 31bf3856ad364e35"/>
</โมดูล>
<ตัวจัดการ>
< ลบชื่อ = "WebServiceHandlerFactory-Integrated" />
<เพิ่มชื่อ = "ScriptHandlerFactory" กริยา = "*" path = "*.asmx" preCondition = "integratedMode"
type = "System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, วัฒนธรรม=เป็นกลาง, PublicKeyToken=31bf3856ad364e35"/>
< เพิ่มชื่อ = "ScriptHandlerFactoryAppServices" verb = "*" path = "*_AppService.axd" preCondition = "integratedMode" type = "System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, เวอร์ชัน = 1.0.61025.0, วัฒนธรรม=เป็นกลาง PublicKeyToken=31bf3856ad364e35"/>
< เพิ่มชื่อ = "ScriptResource" preCondition = "integratedMode" verb = "GET, HEAD" path = "ScriptResource.axd" type = "System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, เวอร์ชัน = 1.0.61025.0, วัฒนธรรม =เป็นกลาง PublicKeyToken=31bf3856ad364e35" />
</ตัวจัดการ>
</system.เว็บเซิร์ฟเวอร์>
พัฒนาโดยใช้ 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;
โดยใช้ระบบการวาดภาพ;
ต่อไปนี้เป็นส่วนการใช้งานของคลาส AjaxBaseWebPart:
/// <สรุป>
/// คลาสพื้นฐานที่ใช้ฟังก์ชันทั้งหมดที่จำเป็นสำหรับการใช้ส่วนขยาย ASP.net Ajax ภายใน WSS
/// </สรุป>
[XmlRoot(Namespace = "Deps.AjaxBaseWebpart")]
คลาสนามธรรมสาธารณะ AjaxBaseWebpart : Microsoft.SharePoint.WebPartPages.WebPart
-
-
* แนวคิดและโค้ดเบื้องหลัง web part พื้นฐานนี้นำมาจากโพสต์บล็อกของ Erics ที่:
* http://www.capdes.com/2007/02/ajaxbasepart_easy_aspnet_20_aj.html
* โดยพื้นฐานแล้วจะจัดการสถานะและการกำหนดค่าของ ScriptManager
* ซึ่งจำเป็นสำหรับส่วนขยาย ASP.net ajax เพื่อจัดการ postbacks ฯลฯ web part นี้ยังรวมถึง
* วิธีการทั่วไปในการจัดการข้อผิดพลาด
-
#ประกาศเขต
สตริงส่วนตัว _ValidationGroupId;
สรุปการตรวจสอบส่วนตัว _ErrorContainer;
ScriptManager ส่วนตัว _AjaxManager;
#endregion
#ตัวสร้างภูมิภาค
AjaxBaseWebpart สาธารณะ ()
{
}
#endregion
#วิธีการของภูมิภาค
/// <สรุป>
/// ใช้เพื่อแสดงวิธีทั่วไปในการแสดงข้อผิดพลาดแก่ผู้ใช้ web part ปัจจุบัน
/// </สรุป>
/// <param name="message">คำอธิบายข้อผิดพลาดที่เกิดขึ้น</param>
โมฆะสาธารณะ RegisterError (ข้อความสตริง)
-
ถ้า (this.Controls.Contains (_ErrorContainer))
-
//วิธีการสร้างรหัสควบคุมเฉพาะนี้ใช้ใน web part OOB บางส่วน
int เคาน์เตอร์ที่ไม่ซ้ำกัน;
ถ้า (HttpContext.Current.Items["GetUniqueControlId"] != null)
-
UniqueCounter = (int)HttpContext.Current.Items["GetUniqueControlId"];
-
อื่น
-
เคาน์เตอร์เฉพาะ = 0;
-
เคาน์เตอร์เฉพาะ ++;
HttpContext.Current.Items["GetUniqueControlId"] = UniqueCounter;
//สร้างเครื่องมือตรวจสอบแบบกำหนดเองเพื่อลงทะเบียนข้อความแสดงข้อผิดพลาดปัจจุบันด้วยตัวควบคุม ValidationSummary
CustomValidator cv = CustomValidator ใหม่ ();
cv.ID = string.Concat("_Error_", UniqueCounter);
cv.ValidationGroup = _ValidationGroupId;
cv.Display = ValidatorDisplay.ไม่มี;
CV.IsValid = เท็จ;
cv.ErrorMessage = ข้อความ;
this.Controls.Add (cv);
-
อื่น
-
// ถ้า RegisterError ถูกเรียกก่อนที่ CreateChildControls จะแทนที่ใน AjaxBasePart ให้โอนผู้ใช้ไปยังหน้าข้อผิดพลาดโดยใช้ SPUtility
SPUtility.TransferToErrorPage("ยังไม่ได้เรียกฟังก์ชัน CreateChildControls ของ AjaxBasePart คุณอาจต้องเพิ่ม "base.CreateChildControls()" ที่ด้านบนของการแทนที่ CreateChildControls ของคุณ");
-
-
/// <สรุป>
/// จำเป็นต้องถูกเรียกเพื่อให้แน่ใจว่าตัวควบคุม ValidationSummary ได้รับการลงทะเบียนบนเพจแล้ว web part ย่อยใดๆ จะต้องมี base.CreateChildControls() ที่ด้านบนของการแทนที่ CreateChildControls ของตนเอง
/// </สรุป>
ป้องกันแทนที่เป็นโมฆะ CreateChildControls ()
-
base.CreateChildControls();
ถ้า (!this.Controls.Contains(_ErrorContainer))
-
_ValidationGroupId = Guid.NewGuid().ToString();
_ErrorContainer = ใหม่ ValidationSummary();
_ErrorContainer.ID = "_ErrorContainer";
_ErrorContainer.ValidationGroup = _ValidationGroupId;
_ErrorContainer.BorderStyle = BorderStyle.Solid;
_ErrorContainer.BorderWidth = หน่วย.พิกเซล(3);
_ErrorContainer.BorderColor = Color.Red;
this.Controls.Add(_ErrorContainer);
-
-
#endregion
#เหตุการณ์ภูมิภาค
/// <สรุป>
/// Oninit เริ่มทำงานก่อนที่จะโหลดเพจ การแก้ไขเพจที่จำเป็นเพื่อรองรับ Ajax เสร็จสิ้นที่นี่
/// </สรุป>
การป้องกันการแทนที่เป็นโมฆะ OnInit (EventArgs e)
-
base.OnInit(e);
//รับ ScriptManager ที่มีอยู่หากมีอยู่บนเพจ
_AjaxManager = ScriptManager.GetCurrent(this.Page);
ถ้า (_AjaxManager == null)
-
//สร้าง ScriptManager ใหม่และ EnablePartialRendering
_AjaxManager = ScriptManager ใหม่();
_AjaxManager.EnablePartialRendering = true;
// แก้ไขปัญหาเกี่ยวกับ postbacks และการดำเนินการของแบบฟอร์ม (DevDiv 55525)
Page.ClientScript.RegisterStartupScript(typeof(AjaxBaseWebpart), this.ID, "_spOriginalFormAction = document.forms[0].action;", จริง);
//tag:"form" att:"onsubmit" val:"return _spFormOnSubmitWrapper( )" บล็อกการส่งกลับแบบ async หลังจากอันแรก
//การไม่เรียก "_spFormOnSubmitWrapper()" จะทำลาย postbacks ทั้งหมด
//ส่งคืนค่าจริงตลอดเวลา ซึ่งค่อนข้างขัดต่อวัตถุประสงค์ของ _spFormOnSubmitWrapper() ซึ่งก็คือบล็อกการย้อนกลับซ้ำ ๆ แต่จะทำให้ MS AJAX Extensions ทำงานได้อย่างถูกต้อง
//เป็นการแฮ็กที่หวังว่าจะมีผลเพียงเล็กน้อย
ถ้า (this.Page.Form != null)
-
สตริง formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"];
ถ้า (!string.IsNullOrEmpty(formOnSubmitAtt) && formOnSubmitAtt == "return _spFormOnSubmitWrapper();")
-
this.Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";
}
//เพิ่ม ScriptManager เป็นตัวควบคุมแรกใน Page.Form
//ฉันไม่คิดว่าสิ่งนี้สำคัญจริงๆ แต่ฉันทำมันเพื่อให้สอดคล้องกับวิธีที่คุณควรวาง ScriptManager เมื่อใช้อย่างเปิดเผย
this.Page.Form.Controls.AddAt (0, _AjaxManager);
-
-
-
#endregion
#คุณสมบัติของภูมิภาค
/// <สรุป>
/// แสดงตัวจัดการสคริปต์ของเพจ ไม่ได้ตั้งค่าไว้จนกว่าจะหลังจาก OnInit
/// </สรุป>
[WebPartStorage(ที่เก็บข้อมูลไม่มี)]
ScriptManager สาธารณะ AjaxManager
-
รับ { กลับ _AjaxManager;
ตั้งค่า { _AjaxManager = ค่า;
-
#ภูมิภาคสุดท้าย
-
ในระหว่างการพัฒนา ตราบใดที่คุณสืบทอด WebPart นี้ คุณสามารถเพิ่ม UpdatePanel และเพิ่มการควบคุมอื่นๆ ในนั้นได้