ส่วนนี้จะแนะนำให้คุณรู้จักกับการจัดการเหตุการณ์ ASP.NET
เหตุการณ์คือการกระทำหรือการเกิดขึ้น เช่น การคลิกเมาส์ การกดปุ่ม การเคลื่อนไหวของเมาส์ หรือการแจ้งเตือนใดๆ ที่ระบบสร้างขึ้น กระบวนการสื่อสารผ่านเหตุการณ์ ตัวอย่างเช่น การขัดจังหวะคือเหตุการณ์ที่ระบบสร้างขึ้น เมื่อเกิดเหตุการณ์ แอปพลิเคชันสามารถตอบสนองและจัดการเหตุการณ์เหล่านั้นได้
เหตุการณ์บน ASP.NET จะถูกยกขึ้นบนเครื่องของผู้ใช้และประมวลผลบนเซิร์ฟเวอร์ ตัวอย่างเช่น ผู้ใช้คลิกปุ่มที่แสดงในเบราว์เซอร์ เหตุการณ์การคลิกเกิดขึ้น เบราว์เซอร์จัดการเหตุการณ์ฝั่งไคลเอ็นต์นี้โดยส่งไปยังเซิร์ฟเวอร์
เซิร์ฟเวอร์มีรูทีนย่อยที่อธิบายสิ่งที่ต้องทำเมื่อมีเหตุการณ์เกิดขึ้น ซึ่งเรียกว่าตัวจัดการเหตุการณ์ ดังนั้น เมื่อข้อมูลเหตุการณ์ถูกส่งไปยังเซิร์ฟเวอร์ จะตรวจสอบว่าเหตุการณ์การคลิกเชื่อมโยงกับตัวจัดการเหตุการณ์หรือไม่ หากเกี่ยวข้อง ตัวจัดการเหตุการณ์จะถูกดำเนินการ
ตัวจัดการเหตุการณ์ ASP.NET โดยทั่วไปจะใช้พารามิเตอร์สองตัวและส่งกลับค่า null พารามิเตอร์แรกแสดงถึงออบเจ็กต์ที่เริ่มการทำงานของเหตุการณ์ และพารามิเตอร์ตัวที่สองคือพารามิเตอร์เหตุการณ์
ไวยากรณ์ทั่วไปสำหรับเหตุการณ์คือ:
private void EventName (object sender, EventArgs e);
กิจกรรมการสมัครที่สำคัญที่สุดคือ:
Application_Start - เกิดขึ้นเมื่อแอปพลิเคชันหรือเว็บเพจเปิดตัว
Application_End - เพิ่มขึ้นเมื่อหยุดแอปพลิเคชันหรือหน้าเว็บ
ในทำนองเดียวกัน กิจกรรมเซสชันที่ใช้บ่อยที่สุดคือ:
Session_Start – เริ่มทำงานเมื่อผู้ใช้ร้องขอเพจจากแอปพลิเคชันในครั้งแรก
Session_End – เพิ่มขึ้นเมื่อเซสชันสิ้นสุดลง
หน้าทั่วไปและเหตุการณ์การควบคุมคือ:
DataBinding – เกิดขึ้นเมื่อตัวควบคุมถูกผูกไว้กับแหล่งข้อมูล
กำจัด – เพิ่มขึ้นเมื่อเพจหรือตัวควบคุมถูกปล่อย
ข้อผิดพลาด – เป็นเหตุการณ์เพจที่เกิดขึ้นเมื่อมีข้อยกเว้นที่ไม่สามารถจัดการได้
Init – เพิ่มขึ้นเมื่อเริ่มต้นเพจหรือตัวควบคุม
โหลด – เพิ่มขึ้นเมื่อมีการโหลดเพจหรือตัวควบคุม
PreRender – เพิ่มขึ้นเมื่อเพจหรือตัวควบคุมแสดงขึ้น
ยกเลิกการโหลด – เพิ่มขึ้นเมื่อมีการยกเลิกการโหลดเพจหรือตัวควบคุมจากหน่วยความจำ
ตัวควบคุม ASP.NET ทั้งหมดถูกนำมาใช้เป็นคลาส และเพิ่มเหตุการณ์เมื่อผู้ใช้ดำเนินการเฉพาะกับคลาสเหล่านั้น ตัวอย่างเช่น เมื่อผู้ใช้คลิกปุ่ม เหตุการณ์ 'คลิก' จะถูกสร้างขึ้น สำหรับการจัดการเหตุการณ์ มีคุณสมบัติในตัวและตัวจัดการเหตุการณ์ แอปพลิเคชันการจัดการเหตุการณ์ได้รับการเข้ารหัสเพื่อตอบสนองต่อเหตุการณ์และดำเนินการตามความเหมาะสม
ตามค่าเริ่มต้น Visual Studio จะสร้างตัวจัดการเหตุการณ์ที่มีรูทีนย่อยที่จัดการส่วนคำสั่ง ส่วนคำสั่งนี้ตั้งชื่อตัวควบคุมและเหตุการณ์ที่โปรแกรมจัดการ
แท็ก ASP สำหรับการควบคุมปุ่ม:
<asp:Button ID="btnCancel" runat="server" Text="Cancel" />
แอปพลิเคชันจัดการเหตุการณ์สำหรับเหตุการณ์คลิก:
Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.ClickEnd Sub
เหตุการณ์ยังสามารถเข้ารหัสได้โดยไม่ต้องใช้ส่วนคำสั่ง Handles ตัวจัดการจะต้องตั้งชื่อตามเหตุการณ์ที่เหมาะสมที่เหมาะสมกับคุณสมบัติของตัวควบคุม
แท็ก ASP สำหรับการควบคุมปุ่ม:
<asp:Button ID="btnCancel" runat="server" Text="Cancel" Onclick="btnCancel_Click" />
แอปพลิเคชันจัดการเหตุการณ์สำหรับเหตุการณ์คลิก:
Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs)End Sub
เหตุการณ์การควบคุมทั่วไปได้แก่:
เหตุการณ์ | คุณสมบัติ | ควบคุม |
---|---|---|
คลิก | OnClick | ปุ่ม, ปุ่มรูปภาพ, ปุ่มลิงค์, บิตแมปรูปภาพ |
สั่งการ | OnCommand | ปุ่ม, ปุ่มรูปภาพ, ปุ่มลิงค์ |
ข้อความเปลี่ยนแปลงแล้ว | OnTextChanged แล้ว | กล่องข้อความ |
SelectedIndexChanged แล้ว | OnSelectedIndexChanged แล้ว | เมนูแบบเลื่อนลง กล่องรายการ รายการปุ่มตัวเลือก กล่องรายการพร้อมช่องทำเครื่องหมาย |
ตรวจสอบแล้วเปลี่ยนแปลงแล้ว | เมื่อตรวจสอบการเปลี่ยนแปลงแล้ว | ช่องทำเครื่องหมายปุ่มตัวเลือก |
เหตุการณ์บางอย่างทำให้แบบฟอร์มถูกโพสต์กลับไปยังเซิร์ฟเวอร์ทันที ซึ่งเรียกว่าเหตุการณ์การติดต่อกลับ ตัวอย่างเช่น การคลิกเหตุการณ์ เช่น Button.Click
เหตุการณ์บางอย่างจะไม่ถูกส่งกลับไปยังเซิร์ฟเวอร์ทันที เหตุการณ์เหล่านี้เรียกว่าเหตุการณ์ที่ไม่มีการเรียกกลับ
ตัวอย่างเช่น เปลี่ยนเหตุการณ์หรือเหตุการณ์การเลือก เช่น TextBox.TextChanged หรือ CheckBox.CheckedChanged เหตุการณ์ที่ไม่ใช่การโทรกลับเหล่านี้สามารถเรียกกลับได้ทันทีโดยการตั้งค่าคุณสมบัติ AutoPostBack ให้เป็นจริง
เหตุการณ์เริ่มต้นสำหรับวัตถุหน้าคือเหตุการณ์การโหลด ในทำนองเดียวกัน ทุกการควบคุมจะมีเหตุการณ์เริ่มต้น ตัวอย่างเช่น เหตุการณ์เริ่มต้นสำหรับตัวควบคุมปุ่มคือเหตุการณ์การคลิก
ตัวจัดการเหตุการณ์เริ่มต้นสามารถสร้างขึ้นได้ใน Visual Studio เพียงแค่คลิกสองครั้งที่ตัวควบคุมในมุมมองออกแบบ ตารางต่อไปนี้แสดงเหตุการณ์เริ่มต้นสำหรับรายการการควบคุมทั่วไป:
ควบคุม | เหตุการณ์เริ่มต้น |
---|---|
การควบคุมการโฆษณา (AdRotator) | สร้างโฆษณาแล้ว |
รายการสินค้า (BulletedList) | คลิก |
ปุ่ม | คลิก |
การควบคุมปฏิทิน (ปฏิทิน) | การเลือกเปลี่ยนแปลงแล้ว |
ช่องทำเครื่องหมาย | ตรวจสอบแล้วเปลี่ยนแปลงแล้ว |
รายการกล่องกาเครื่องหมาย | SelectedIndexChanged แล้ว |
DataGrid | SelectedIndexChanged แล้ว |
รายการข้อมูล | SelectedIndexChanged แล้ว |
ดรอปดาวน์ลิสต์ | SelectedIndexChanged แล้ว |
ไฮเปอร์ลิงก์ | คลิก |
ปุ่มรูปภาพ | คลิก |
ฮอตสปอต (ImageMap) | คลิก |
ปุ่มไฮเปอร์ลิงก์ (LinkButton) | คลิก |
รายการแบบเลื่อนลงแบบเลือกเดียวหรือหลายรายการ (ListBox) | SelectedIndexChanged แล้ว |
เมนู | เมนูรายการคลิก |
RadioButton | ตรวจสอบแล้วเปลี่ยนแปลงแล้ว |
กลุ่มปุ่มตัวเลือก (RadioButtonList) | SelectedIndexChanged แล้ว |
ตัวอย่าง
ตัวอย่างนี้ประกอบด้วยเพจแบบธรรมดาที่มีป้ายกำกับการควบคุมและปุ่มควบคุม เมื่อเหตุการณ์เพจ เช่น Page_Load, Page_Init, Page_PreRender ฯลฯ เกิดขึ้น กิจกรรมจะส่งข้อความ ซึ่งจะแสดงโดยตัวควบคุมป้ายกำกับ เมื่อคลิกปุ่ม เหตุการณ์ Button_Click จะปรากฏขึ้น พร้อมทั้งส่งข้อความที่แสดงโดยป้ายกำกับด้วย
สร้างเว็บไซต์ใหม่และลากตัวควบคุมป้ายกำกับและปุ่มควบคุมจากกล่องเครื่องมือการควบคุม ใช้คุณสมบัติหน้าต่าง ตั้งค่า ID ควบคุมเป็น .lblmessage และ .btnclick ตามลำดับ ตั้งค่าคุณสมบัติข้อความของตัวควบคุมปุ่มเป็น "คลิก"
ไฟล์มาร์กอัป (.aspx):
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="eventdemo._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblmessage" runat="server" > </asp:Label> <br /> <br /> <br /> <asp:Button ID="btnclick" runat="server" Text="Click" onclick="btnclick_Click" /> </div> </form> </body></html>
คลิกสองครั้งที่มุมมองการออกแบบและย้ายไปยังโค้ดที่อยู่ด้านหลังไฟล์ เหตุการณ์ Page_Load ถูกสร้างขึ้นโดยอัตโนมัติโดยไม่มีรหัสใดๆ เขียนบรรทัดโค้ดที่อธิบายตนเองต่อไปนี้:
using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;namespace eventdemo { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { lblmessage.Text += "Page load event handled. <br />"; if (Page.IsPostBack) { lblmessage.Text += "Page post back event handled.<br/>"; } } protected void Page_Init(object sender, EventArgs e) { lblmessage.Text += "Page initialization event handled.<br/>"; } protected void Page_PreRender(object sender, EventArgs e) { lblmessage.Text += "Page prerender event handled. <br/>"; } protected void btnclick_Click(object sender, EventArgs e) { lblmessage.Text += "Button click event handled. <br/>"; } }}
ดำเนินการหน้า แท็กแสดงการโหลดหน้า การเริ่มต้นหน้า และเหตุการณ์การแสดงตัวอย่างหน้า คลิกปุ่มเพื่อดูเอฟเฟกต์: