تم إصدار
رد اتصال العميل الخاص بـ Asp.Net 2.0
Asp.Net 2.0.يحتوي الإصدار 2.0 على العديد من الميزات الجديدة، وتعد عمليات رد الاتصال من جانب العميل واحدة منها. تسمح لنا عمليات رد الاتصال من جانب العميل باستدعاء أساليب من جانب الخادم دون عمليات إعادة النشر، وهي متوافقة مع الوظائف التي يوفرها AJAX، ولكنها ليست مرنة مثل AJAX التي يمكنها تخصيص طرق الاتصال، لكن وظيفة رد الاتصال التي تأتي مع الإصدار 2.0 لا يمكنها ذلك. لاستخدام وظيفة رد اتصال العميل، يجب عليك تنفيذ واجهة system.Web.UI.IcallbackEventHandler.
تحتوي هذه الواجهة على طريقتين
// يتم استدعاء هذه الطريقة دائمًا عندما يتصل العميل مرة أخرى
الفراغ العام RaiseCallbackEvent (سلسلة أحداث الوسيطة)
// سيتم استدعاء هذه الطريقة بعد تنفيذ RaiseCallbackEvent. سيتم إرسال القيمة المرجعة لهذه الطريقة مرة أخرى إلى العميل
سلسلة عامة GetCallbackResult()
مثال:
.CS:
String cbReference = Page.ClientScript.GetCallbackEventReference(
this،"arg"، "ReceiveServerData"، "context")؛
سلسلة رد الاتصال النصي؛
callbackScript = "function CallServer(arg, context)" + "{ " + cbReference + "} ;";
Page.ClientScript.RegisterClientScriptBlock(
this.GetType()،"CallServer"، callbackScript، true);
جافا سكريبت:
مقدمة إلى AJAX
AJAX ليست تقنية جديدة، ولكنها مزيج عضوي من بعض التقنيات الموجودة، بما في ذلك: XmlHttp، وReflect. يتضمن إطار عمل AJAX بشكل أساسي: HttpHandler مخصصًا وجزءًا من كود JavaScript.
آلية تشغيل AJAX
في الماضي، عندما استخدمنا XmlHttp لتنفيذ صفحة غير قابلة للتحديث، استخدمنا، والفرق هو أن HttpHandler لهذه الصفحة يتم تنفيذه بأنفسنا.
قم ببناء AJAX الخاص بك:
1. نحتاج أولاً إلى تنفيذ معالج Http (HttpHandler) للرد على طلبات العميل:
لتنفيذ HttpHandler مخصص، تحتاج إلى تنفيذ واجهة IHttpHandler.
تحتوي الواجهة على خاصية واحدة وأسلوب واحد:
bool IHttpHandler.IsReusable
IHttpHandler.ProcessRequest (سياق HttpContext) فارغ
مثال:
منطقي IHttpHandler.IsReusable
{
الحصول على {العودة الحقيقية}
}
IHttpHandler.ProcessRequest (سياق HttpContext) فارغ
{
context.Response.Clear(); // احصل على الطريقة التي سيتم استدعاؤها
اسم طريقة السلسلة = context.Request.QueryString["me"];
// احصل على معلومات التجميع.
//Czhenq.AJAX.Class1.Dencode هي طريقة مخصصة لترميز السلسلة
string AssemblyName = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString["as"]);
// احصل على معلمات الطريقة
string Arguments = context.Request.QueryString["ar"]; // ابدأ في استدعاء الطريقة
نوع النوع = Type.GetType(AssemblyName);
طريقة MethodInfo = type.GetMethod(methodName,
BindingFlags.NonPublic |. BindingFlags.Public |.
إذا (الطريقة! = فارغة)
{
// يتم فصل المعلمات بـ "،"
string[] args = Arguments.Split(".ToCharArray());
ParameterInfo[] paras =method.GetParameters();
كائن[] وسيطة = كائن جديد[paras.Length];
لـ (int i = 0; i < الوسيطة. الطول; i++)
{
إذا (i
// هنا نقوم فقط بتحويل المعلمات إلى Int32، دون أخذ أي اعتبارات أخرى.
الوسيطة[i] = Convert.ToInt32(args[i]);
}
}
قيمة الكائن = الأسلوب.Invoc(Activator.CreateInstance(type, true),argument);
if (value != null) context.Response.Write(value.ToString());
آخر context.Response.Write("خطأ");
}
// نهاية المعالجة
context.Response.End();
مرحبًا بك في منتدى مجتمع .NET وتفاعل مع 2 مليون موظف فني >> أدخل
2. كود Javascript للعميل:
الوظيفة CallMethod(AssemblyName,MethodName,Argus)
{
فار args = "";
for(var i=0;i
args += Argus[i] + "؛"
if(args.length>0) args = args.substr(0,args.length-1);
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
url = "AJAX/AJAX.czhenq?as=" + AssemblyName + "&me=" + MethodName +"&ar="+ args;
xmlhttp.open("POST",url,false);
xmlhttp.send();
تنبيه (xmlhttp.responseText)؛
}
3. تم تنفيذ إطار عمل AJAX بسيط. اكتب الآن جزءًا من التعليمات البرمجية للاختبار.
استخدم AJAX 1 الخاص بك.
قم بإنشاء موقع ويب جديد واستخدم HttpHandler الذي كتبته للتو. وقم بتسجيل HttpHandler الخاص بك في Web.config الخاص بموقع الويب، مع الإشارة إلى أنه ستتم معالجة هذه الطلبات باستخدام المعالج الذي كتبته. يوضح المحتوى التالي: ستتم معالجة جميع الطلبات التي تنتهي بـ "czq" باستخدام "Czhenq.HttpHandlerFactory".
type="Czhenq.HttpHandlerFactory, Czhenq.AJAX"/>
2. أضف صفحة ويب، وانسخ البرنامج النصي الآن إلى الصفحة، وأضف الطريقة التي تريد الاتصال بها.
إضافة سلسلة خاصة (int i، int j)
{
إرجاع TextBox1.Text؛
}
3. ضع عنصر تحكم HiddenField على الصفحة وقم بتسميته اسم التجميع. وأضف الكود التالي في Page_Load:
string AssemblyName = Czhenq.AJAX.Class1.Encode(
typeof(_Default).AssemblyQualifiedName);
اسم التجميع. قيمة = اسم التجميع؛
var AssemblyName = document.getElementById("AssemblyName"); var argus = new Array();argus.push("100");argus.push("200");CallMethod(assemblyName,"Add",argus)
لتلخيص ذلك، AJAX ليست تقنية جديدة، إنها مجرد مزيج عضوي من بعض التقنيات الموجودة، يمكننا ببساطة أن نفهم AJAX على النحو التالي: AjAx عبارة عن تغليف لـ JavaScript يستدعي XmlHttp.
مرفق معه تنفيذ Encode وDencode:
تشفير السلسلة الثابتة العامة (قيمة السلسلة)
{
byte[] bytes = ASCIIEncoding.ASCII.GetBytes(value);
إرجاع Convert.ToBase64String(bytes);
}
سلسلة ثابتة عامة Dencode (قيمة السلسلة)
{
byte[] bytes = Convert.FromBase64String(value);
إرجاع ASCIIEncoding.ASCII.GetString(bytes);
}