เมื่อฉันเขียนโปรแกรม ASP มาก่อน ฉันรู้ว่ามีเพียงปุ่มที่มีประเภทที่ตั้งค่าให้ส่งเท่านั้นที่สามารถทริกเกอร์แบบฟอร์มเพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ได้
ตัวอย่างเช่น: ปุ่มใน Asp.Net เท่ากับ <input type="submit">
แต่ปัจจุบันการควบคุมหลายอย่างใน Asp.Net สามารถโต้ตอบกับฝั่งเซิร์ฟเวอร์ได้ตามต้องการ เช่น LinkButton
สิ่งนี้สำเร็จได้อย่างไร?
มันเป็นวิธีการใหม่โดยสิ้นเชิงหรือไม่?
อันที่จริง นี่เป็นเพียงวิธีแก้ปัญหาชั่วคราวจาก Microsoft
มาดูรหัสลูกค้ากันก่อน
นี่คือหน้าที่มี LinkButton
ในความเป็นจริง LinkButton บนฝั่งไคลเอ็นต์เทียบเท่ากับ A ใน html
มาดูกันว่าเหตุใด LinkButton จึงสามารถโต้ตอบกับเซิร์ฟเวอร์ได้
เมื่อเราคลิกขวาเพื่อดูซอร์สโค้ดของเพจ เราจะเห็น:
<script type="text/javascript">
-
var theForm = document.forms['ctl00'];
ถ้า (!แบบฟอร์ม) {
แบบฟอร์ม = document.ctl00;
-
ฟังก์ชั่น __doPostBack (eventTarget, eventArgument) {
ถ้า (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.ส่ง();
-
-
-
</script>
<a id="simpleLinkButton1" href="javascript:__doPostBack('simpleLinkButton1','')">คลิกฉัน</a>
<ประเภทอินพุต = "ซ่อน" ชื่อ = "__EVENTTARGET" id = "__EVENTTARGET" ค่า = "" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
จากโค้ดข้างต้น เราจะเห็นว่า simpleLinkButton1 เป็นลิงก์ และส่งแบบฟอร์มผ่านโค้ดไคลเอ็นต์
ฟิลด์ที่ซ่อนอยู่สองฟิลด์ถูกใช้เพื่อแลกเปลี่ยนข้อมูลโดยการกำหนดค่าพารามิเตอร์สองตัวของ __doPostBack ให้กับฟิลด์ที่ซ่อนอยู่ทั้งสองนี้
นี่เป็นเหตุผลที่เข้าใจง่ายที่สุดว่าทำไม LinkButton จึงสามารถส่งข้อมูลได้
แล้วโค้ดด้านบนนี้ถูกสร้างขึ้นมาได้อย่างไร?
เราสามารถรู้ได้อย่างชัดเจนโดยดูที่ซอร์สโค้ดของ LinkButton:
การแทนที่ภายในที่ได้รับการปกป้องถือเป็นโมฆะ OnPreRender (EventArgs e)
-
ฐาน 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