عندما كتبت برنامج ASP من قبل، كنت أعلم أن الزر الذي تم تعيين النوع للإرسال فيه هو فقط الذي يمكنه تشغيل نموذج لإرسال البيانات إلى الخادم.
على سبيل المثال: الزر في Asp.Net يساوي <input type="submit">.
ولكن الآن يمكن للعديد من عناصر التحكم في Asp.Net التفاعل مع جانب الخادم حسب الرغبة، مثل LinkButton.
كيف يتم تحقيق ذلك؟
هل هي طريقة جديدة تماما؟
في الواقع، هذا مجرد حل بديل من Microsoft.
دعونا أولا نلقي نظرة على رمز العميل.
هنا صفحة بها LinkButton،
في الواقع، LinkButton من جانب العميل يعادل A في html.
دعونا نلقي نظرة على سبب قدرة LinkButton أيضًا على التفاعل مع الخادم؟
عندما ننقر بزر الماوس الأيمن لعرض الكود المصدري للصفحة، نرى:
<script type="text/javascript">
<!--
var theForm = document.forms['ctl00'];
إذا (!النموذج) {
theForm = document.ctl00;
}
وظيفة __doPostBack(eventTarget,eventArgument) {
إذا (!theForm.onsubmit || (theForm.onsubmit()!= false)) {
theForm.__EVENTTARGET.value = eventsTarget;
theForm.__EVENTARGUMENT.value = eventsArgument;
theForm.submit();
}
}
// -->
</script>
<a id="simpleLinkButton1" href="javascript:__doPostBack('simpleLinkButton1','')">انقر فوقي</a>
<نوع الإدخال = "مخفي" الاسم = "__EVENTTARGET" معرف = "__EVENTTARGET" القيمة = "" />
<نوع الإدخال = "مخفي" الاسم = "__EVENTARGUMENT" معرف = "__EVENTARGUMENT" القيمة = "" />
من الكود أعلاه، يمكننا أن نرى أن simpleLinkButton1 هو رابط، ويتم إرسال النموذج من خلال رمز العميل.
يتم استخدام اثنين من الحقول المخفية لتبادل البيانات عن طريق تعيين قيمتي المعلمة __doPostBack لهذين الحقلين المخفيين.
هذا هو السبب الأكثر بديهية الذي يجعل LinkButton يتمتع أيضًا بالقدرة على إرسال البيانات.
إذًا كيف تم إنشاء الكود أعلاه؟
يمكننا أن نعرف بوضوح من خلال النظر إلى الكود المصدري لـ LinkButton:
تجاوز داخلي محمي باطل OnPreRender (EventArgs e)
{
base.OnPreRender(e);
إذا ((this.Page != null) && this.Enabled)
{
this.Page.RegisterPostBackScript();
إذا ((this.CausesValidation && (this.Page.GetValidators(this.ValidationGroup).Count > 0)) || !string.IsNullOrEmpty(this.PostBackUrl))
{
this.Page.RegisterWebFormsScript();
}
}
}
ما سبق هو مجرد تسجيل لبعض تجاربي أثناء الدراسة والعمل حتى لا أنسى.
وآمل أن التواصل أكثر معكم جميعا!
http://www.cnblogs.com/maplye/archive/2006/08/29/489338.html