يعد رد اتصال العميل لـ Asp.Net2.0 طريقة مثيرة للغاية، فهو يسمح لنا بالتحكم في البيانات التي سيتم إرسالها إلى الخادم دون إرسال الصفحة بأكملها، وفي الوقت نفسه، يقوم الخادم بإرجاع البيانات التي تحتاجها فقط دون إرسالها مرة أخرى الصفحة بأكملها.
أولاً، علينا أن نتحدث عن طريقة مهمة جدًا: لقد كتبت GetCallbackEventRefernce ما أفهمه، يرجى الإشارة إلى ذلك.
يقوم GetCallbackEventReference أولاً بتنفيذ أسلوب RaiseCallbackEvent الذي يسمح للبرنامج النصي للعميل بتمرير المعلمات إلى الخادم، ثم يقوم بإرجاع قيمة أسلوب RaiseCallBackEvent إلى المعلمة التي قمت بتسجيلها في أسلوب GetCallbackEventRefernce (في الواقع هو أيضًا برنامج نصي تريد كتابته على العميل ). لاستدعاء GetCallbackEventRefernce، يجب عليك تمرير معلمتين من البرنامج النصي للعميل، أحدهما هو القيمة المراد تمريرها إلى حدث RaiseCallbackEvent، والآخر هو السياق.
معنى معلماته كما يلي:
أولاً: التحكم في الصفحة أو الخادم ينفذ واجهة ICallbackEventHandler، اكتب هذا لتمثيل الصفحة السابقة.
الثاني: يمثل القيمة التي تريد تمريرها من العميل إلى طريقة RaiseCallbackEvent الخاصة بالخادم.
والثالث: دالة js التي تريد كتابتها على العميل. وفي نفس الوقت، سيقوم الخادم أيضًا بتمرير البيانات المحسوبة إلى هذه الوظيفة هذه المعلمات الوظيفة.
رابعا: لا أعرف بالضبط ما يعنيه السياق، الكود الذي يرسله GetCallbackEventRefernce إلى العميل هو كما يلي:
WebForm_DoCallback('__Page',arg,ReceiveServerData,context,null,false)
فماذا يجب أن نفعل للحصول على الطلب منه. العميل كيف نتصل به؟ رأيت ثلاث طرق:
الأولى: كتابة سلسلة عامة في الخلفية وتعيينها في Page_Load: =Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context"); .ClientScrip، لأنه سيعيد ClientScriptManager، الذي يدير كافة البرامج النصية للعميل. ثم في حدث عند النقر على زر في المقدمة <%=سلسلة الخلفية العامة تلك%>، قم بإنشاء كود تجريبي صغير كما يلي:
Frontend ServerTime.aspx: من أجل الراحة، قم بإزالة الكثير من لغة HTML عديمة الفائدة
<%@ page language=" C#" CodeFile = "ServerTime.aspx.cs" يرث = "ServerTime_aspx" %>
<أتش تي أم أل>
<الرأس>
<العنوان> وقت الخادم</العنوان>
<script language="javascript">
الدالة GetServerTime()
{
رسالة فار = '';
سياق فار = '';
<%=sCallBackFunctionInvocation%>
}
وظيفة ShowServerTime(timeMessage, context) {
تنبيه('الوقت الحالي على الخادم هو:n' + timeMessage);
}
</ نص >
</الرأس>
<الجسم>
< معرف النموذج = "MainForm" runat = "الخادم">
<نوع الإدخال = "زر" القيمة = "الحصول على وقت الخادم" عند النقر = "GetServerTime ()؛ />".
</النموذج>
</ الجسم>
</html>
الواجهة الخلفية:
استخدام النظام؛
باستخدام System.Web.UI؛
فئة عامة جزئية ServerTime_aspx: الصفحة، ICallbackEventHandler
{
// تأكد من تنفيذ عذر ICallbackEventHandler public string sCallBackFunctionInvocation؛
void Page_Load(object sender, System.EventArgs e)
{
sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context");
}
سلسلة عامة RaiseCallbackEvent (سلسلة الأحداث)
{
إرجاع DateTime.Now.ToString();
}
}
تشغيل، انقر فوق الزر وستكون النتيجة كما يلي:
الطريقة الثانية: في الطريقة السابقة يجب أن نربط الخلفية بالمقدمة، فماذا لو لم نربطها؟ نقوم بذلك:
استخدم GetCallbackEventReference مباشرة كمحتوى تنفيذ في وظيفة js، ثم قم بتسجيل وظيفة js هذه للعميل.
رمز صفحة الاختبار للواجهة الأمامية:
<%@ لغة الصفحة = "C#" AutoEventWireup = "true" CodeFile = "TestPage.aspx.cs" Inherits = "TestPage" %>
<أتش تي أم أل>
<الرأس>
<عنوان>صفحة بلا عنوان</عنوان>
<نوع البرنامج النصي = "نص/جافا سكريبت">
اختبار الوظيفة ()
{
var lb = document.getElementById("Select1");
// المربع المنسدل الذي سيتم أخذه var con = lb.options[lb.selectedIndex].text;
// احصل على نص المربع المنسدل الذي حددته ثم اتصل بـ CallTheServer، وهو إخراج دالة js بواسطة الخادم CallTheServer(con,'');
}
دالة ريسيفيرفيرداتا (rValue)
{
Results.innerHTML = rValue;
}
</ نص >
</الرأس>
<الجسم>
< معرف النموذج = "form1" runat = "الخادم">
<ديف>
<حدد المعرف = "اختر 1">
< قيمة الخيار = 1 مختارة = "محدد" > تلميذ الماوس </option >
<قيمة الخيار=2>السيد وو تشيوا</الخيار>
</اختر>
<br />
<br />
<input onclick="test()" value="إرجاع نص المربع المنسدل من الخادم" type=button>
<br />
<br />
<معرف النطاق = "النتائج"></span>
<br />
</شعبة>
</النموذج>
</ الجسم>
</html>
كود الواجهة الخلفية:
استخدام النظام؛
باستخدام System.Data؛
باستخدام System.Configuration؛
باستخدام System.Collections؛
باستخدام System.Web؛
باستخدام System.Web.Security؛
باستخدام System.Web.UI؛
باستخدام System.Web.UI.WebControls؛
باستخدام System.Web.UI.WebControls.WebParts؛
باستخدام System.Web.UI.HtmlControls
الفئة العامة الجزئية TestPage: System.Web.UI.Page,System.Web.UI.ICallbackEventHandler;
{
Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
{
String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
سلسلة رد الاتصال النصي؛
callbackScript = "function CallTheServer(arg,context)" +"{ " + cbReference + "} ;";
Page.ClientScript.RegisterStartupScript(this.GetType(),"abcdefg",callbackScript, true);
// تمثل المعلمة الرابعة ما إذا كان سيتم إضافة علامة <script type="text/javascript"></script> تلقائيًا إلى البرنامج النصي، بالطبع يجب إضافتها}
سلسلة RaiseCallbackEvent العامة (سلسلة أحداث الوسيطة)
{
return "ما حددته هو" +eventArgument;
}
}
وفيما يلي نتيجة التنفيذ:
النوع الثالث: الأولان عبارة عن عناصر تحكم HTML مع <input type="button"، فماذا لو كان زر خادم؟ بالطبع، يمكنك أيضًا إضافة سمة onclick لزر الخادم في الخلفية.
رمز aspx للواجهة الأمامية:
<%@ لغة الصفحة = "C#" AutoEventWireup = "true" CodeFile = "third.aspx.cs" يرث = "الثالث" %>
<أتش تي أم أل>
<الرأس>
<عنوان>صفحة بلا عنوان</عنوان>
</الرأس>
<الجسم>
< معرف النموذج = "form1" runat = "الخادم">
<ديف>
<حدد المعرف = "اختر 1">
<الخيار المحدد = "المحدد" القيمة = 1> تلميذ الماوس </الخيار>
<قيمة الخيار=2>السيد وو تشيوا</الخيار>
</اختر>
<asp:Button ID="Button1" runat="server" Text="هذا زر خادم" /></div>
<div معرف = "div1" />
<نوع البرنامج النصي = "نص/جافا سكريبت">
وظيفة إعادة (متقاعد)
{
document.getElementById("div1").innerHTML = ret;
تنبيه (متقاعد)؛
}
</ نص >
</النموذج>
</ الجسم>
</أتش تي أم أل>
الكود خلف:
باستخدام النظام؛
باستخدام System.Data؛
باستخدام System.Configuration؛
باستخدام System.Collections؛
باستخدام System.Web؛
باستخدام System.Web.Security؛
باستخدام System.Web.UI؛
باستخدام System.Web.UI.WebControls؛
باستخدام System.Web.UI.WebControls.WebParts؛
باستخدام System.Web.UI.HtmlControls
الفئة العامة الجزئية الثالثة: System.Web.UI.Page,System.Web.UI.ICallbackEventHandler;
{
Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
{
// المعلمة الرابعة فارغة، لأنه لم يعد بإمكانك تمرير المعلمات إليها في سلسلة js str = Page.ClientScript.GetCallbackEventReference(this,"document.getElementById('Select1')._
options[document.getElementById('Select1').selectedIndex].text"،"Re"،null);
// return false هو منع إرسال النموذج Button1.Attributes.Add("onclick",str+";return false;");
}
#region أعضاء ICallbackEventHandler
سلسلة عامة RaiseCallbackEvent (سلسلة أحداث الوسيطة)
{
إذا (eventArgument == "المتدرب الماوس")
{
return "متدرب الفأر: الحياة مثل الفأر. إذا لم تكن في الحظيرة، فأنت في المرحاض!";
}
آخر
{
عودة "السيد وو تشيوا: واثق، معتمد على نفسه، متفائل"؛
}
}
#endregion
}
نصيحة صغيرة، بعد الانتهاء من كتابة System.Web.UI.ICallbackEventHandler، حرك الماوس لأعلى، وسيكون هناك مخطط صغير أمام System. انقر عليه لكتابة كود RaiseCallbackEvent تلقائيًا.
والثالث يشعر بالأسوأ!