المعلومات الواردة في هذا المقال تم جمعها من عدة مصادر، لذا لا أستطيع أن أذكرها كلها، أعتذر عن ذلك. المحتوى مخصص لإدارة المعرفة الشخصية فقط.
تم إنشاء 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 في جزء الويب. الرجاء مراجعة وثائق ASP.NET AJAX للحصول على التفاصيل. لا يمكن استخدام كافة عناصر التحكم في UpdatePanel.
إذا تم تمكين التخزين المؤقت للمخرجات، فلن تتمكن من استخدام ASP.NET AJAX وإلا سيحدث خطأ. التناقض الكلاسيكي بين الأداء وحسن التوقيت.
فوائد استخدام تقنية Microsoft ASP.NET AJAX 1.0 في SharePoint:
يمكن إنشاء مكتبة كاملة لموارد البرنامج النصي للعميل ويمكن تجميع بعض المكونات القابلة لإعادة الاستخدام.
يمكن عرض بيانات خدمة الويب الخاصة بنا باستخدام JSON، ويمكن استخدام النتائج بسهولة في تطبيقات JavaScript/Ajax.
يمكن أن يوفر إنشاء أجزاء ويب باستخدام التقنية الموجودة في الملحقات أنماطًا تفاعلية للغاية، مثل مربع نص مزود بوظيفة الإكمال التلقائي.
استخدم UpdatePanel في WebPart لتحقيق تفاعل خالٍ من رد الاتصال وتقليل عدد مرات تحديث الصفحة.
فيما يلي خطوات إعداد البيئة قبل نشر المكونات التي تستخدم تقنية Microsoft ASP.NET AJAX 1.0. (تحتاج فقط إلى نشره مرة واحدة في البيئة المثبتة حديثًا، ولن تحتاج إلى إضافة جزء ويب لاحقًا)
قم بتنزيل ASP.NET AJAX وتثبيته على مجموعة خوادم الويب
أولاً، يجب عليك تثبيت "ASP.NET 2.0 AJAX Extensions 1.0 "، والتي يمكن تنزيلها من تنزيل ajax.asp .net.
توسيع SharePoint web.config لـ Microsoft ASP.NET AJAX 1.0
نحتاج إلى تسجيل بعض الإدخالات المحددة لأياكس. قم بتحرير ملف SharePoint web.config، الموجود عادةً في الدليل التالي:
c:inetpubwwwrootwssvirtualdirectories80
أضف عنصر
أضف محتويات قسم
<الضوابط>
الضوابط>
الصفحات>
أضف المحتوى التالي ضمن علامة
التجمعات>
قم بإضافة المحتوى التالي في قسم
<إضافة فعل = "GET,HEAD" مسار = "ScriptResource.axd" نوع = "System.Web.Handlers.ScriptResourceHandler، System.Web.Extensions، الإصدار = 1.0.61025.0، الثقافة = محايدة، PublicKeyToken = 31bf3856ad364e35" التحقق من صحة = " كاذبة"/>
أضف محتوى التسجيل التالي في قسم HttpModules، أسفل محتوى التسجيل الموجود بالكامل
في قسم
وأخيرًا، أضف علامة التكوين التالية إلى نهاية ملف web.config، قبل علامة الإغلاق
<البرمجة النصية>
<خدمات الويب>
ويب سيرفيسز>
<نظام.ويب سيرفر>
<الوحدات>
الوحدات>
<المعالجون>
<إضافة اسم = "ScriptHandlerFactory" الفعل = "*" المسار = "*.asmx" preCondition = "IntegratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, الإصدار=1.0.61025.0, Culture=محايد, PublicKeyToken=31bf3856ad364e35"/>
<إضافة اسم = "ScriptHandlerFactoryAppServices" الفعل = "*" المسار = "*_AppService.axd" preCondition = "integratedMode" نوع = "System.Web.Script.Services.ScriptHandlerFactory، System.Web.Extensions، الإصدار = 1.0.61025.0، الثقافة=محايدة، PublicKeyToken=31bf3856ad364e35"/>
<إضافة اسم = "ScriptResource" preCondition = "integratedMode" الفعل = "GET، HEAD" مسار = "ScriptResource.axd" نوع = "System.Web.Handlers.ScriptResourceHandler، System.Web.Extensions، الإصدار = 1.0.61025.0، الثقافة =محايد، PublicKeyToken=31bf3856ad364e35" />
معالجات>
التطوير باستخدام 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:
/// <الملخص>
/// فئة أساسية تنفذ كافة الوظائف المطلوبة لاستخدام ملحقات ASP.net Ajax داخل WSS
/// الملخص>
[XmlRoot(Namespace = "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؛
Private ValidationSummary _ErrorContainer;
Private ScriptManager _AjaxManager;
#endregion
#region منشئ
AjaxBaseWebpart العام ()
{
}
#
طرق المنطقة #المنطقة
/// <الملخص>
/// يُستخدم لتوفير طريقة شائعة لعرض الأخطاء لمستخدم جزء الويب الحالي.
/// الملخص>
/// وصف الخطأ الذي حدث.
خطأ في التسجيل باطلة عامة (رسالة سلسلة)
{
إذا (this.Controls.Contains(_ErrorContainer))
{
// يتم استخدام هذه الطريقة لإنشاء معرف تحكم فريد في بعض أجزاء ويب OOB
int UniqueCounter;
إذا (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 = message;
this.Controls.Add(cv);
}
آخر
{
// إذا تم استدعاء RegisterError قبل تجاوز CreateChildControls في AjaxBasePart، فقم بنقل المستخدم إلى صفحة خطأ باستخدام SPUtility
SPUtility.TransferToErrorPage("لم يتم استدعاء وظيفة CreateChildControls الخاصة بـ AjaxBasePart. ربما تحتاج إلى إضافة "base.CreateChildControls()" إلى الجزء العلوي من تجاوز CreateChildControls.");
}
}
/// <الملخص>
/// يجب استدعاؤه للتأكد من تسجيل عنصر التحكم ValidationSummary على الصفحة. ستحتاج أي أجزاء ويب فرعية إلى وجود base.CreateChildControls() في الجزء العلوي من تجاوز CreateChildControls الخاص بها.
/// الملخص>
تجاوز محمي باطلة 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);
}
}
#
أحداث المنطقة #المنطقة
/// <الملخص>
/// يتم تشغيل Oninit قبل تحميل الصفحة، حيث يتم إجراء التعديلات على الصفحة الضرورية لدعم Ajax.
/// الملخص>
تجاوز محمي باطل OnInit (EventArgs e)
{
base.OnInit(e);
// احصل على ScriptManager الموجود في حالة وجوده على الصفحة
_AjaxManager = ScriptManager.GetCurrent(this.Page)
;
{
// إنشاء ScriptManager جديد وEnablePartialRendering
_AjaxManager = new 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()" يؤدي إلى انقطاع جميع عمليات إعادة النشر
// يعود صحيحًا طوال الوقت، وهو ما يتعارض إلى حدٍ ما مع غرض _spFormOnSubmitWrapper() وهو منع عمليات إعادة النشر المتكررة، ولكنه يسمح لامتدادات MS AJAX بالعمل بشكل صحيح
// إنه اختراق نأمل أن يكون له تأثير ضئيل
إذا (this.Page.Form != null)
{
stringformOnSubmitAtt = 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(Storage.None)]
مدير البرنامج النصي العام AjaxManager
{
الحصول على {إرجاع _AjaxManager}؛
set { _AjaxManager = value }
}
#endregion
}
أثناء التطوير، طالما أنك ترث جزء الويب هذا، يمكنك إضافة UpdatePanel وإضافة عناصر تحكم أخرى فيه.