ASP.NET อนุญาตให้ผู้ใช้สร้างการควบคุม การควบคุมที่ผู้ใช้กำหนดเหล่านี้จัดเป็น:
การควบคุมผู้ใช้
การควบคุมแบบกำหนดเอง
การควบคุมผู้ใช้ทำงานเหมือนกับเพจ ASP.NET ขนาดเล็กหรือเว็บฟอร์มที่เพจอื่นๆ จำนวนมากสามารถใช้ได้ สิ่งเหล่านี้ได้มาจากคลาส System.Web.UI.UserControl ตัวควบคุมเหล่านี้มีคุณสมบัติดังต่อไปนี้:
พวกเขามีนามสกุล .ascx
ต้องไม่มีหรือแท็กใดๆ
พวกเขามีคำสั่งควบคุมแทนคำสั่งหน้า
เพื่อให้เข้าใจแนวคิดนี้ เรามาสร้างการควบคุมผู้ใช้อย่างง่ายซึ่งจะทำหน้าที่เป็นส่วนท้ายของเว็บเพจ ในการสร้างและใช้การควบคุมผู้ใช้ ให้ทำตามขั้นตอนต่อไปนี้:
สร้างแอปพลิเคชันเว็บใหม่
คลิกขวาที่โฟลเดอร์โครงการใน Solution Explorer และเลือกเพิ่มรายการใหม่
เลือกการควบคุมผู้ใช้เว็บจากกล่องโต้ตอบเพิ่มรายการใหม่ และตั้งชื่อเป็น footer.ascx เริ่มแรก footer.ascx มีเพียงคำสั่งควบคุมเท่านั้น
<%@ ภาษาควบคุม = "C#" AutoEventWireup = "true" CodeBehind = "footer.ascx.cs" สืบทอด = "customcontroldemo.footer" %>
เพิ่มรหัสต่อไปนี้ลงในไฟล์:
<table> <tr> <td align="center"> ลิขสิทธิ์ ©2010 TutorialPoints Ltd.</td> </tr> <tr> <td align="center"> ที่ตั้ง: ไฮเดอราบัด, AP </td> </ เคลื่อนย้ายได้>
เมื่อต้องการเพิ่มการควบคุมผู้ใช้ให้กับเว็บเพจของคุณ คุณต้องเพิ่มคำสั่ง Register และอินสแตนซ์ของการควบคุมผู้ใช้ของเพจ รหัสต่อไปนี้แสดงคำแนะนำ:
<%@ ภาษาเพจ = "C#" AutoEventWireup = "true" CodeBehind = "Default.aspx.cs" สืบทอด = "customcontroldemo._Default" %><%@ Register Src = "~/footer.ascx" TagName = "footer" TagPrefix="Tfooter" %><!DOCTYPE html สาธารณะ "-//W3C//DTD XHTML 1.0 เฉพาะกาล//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > < head runat = "เซิร์ฟเวอร์"> <title> หน้าที่ไม่มีชื่อ </title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat = "เซิร์ฟเวอร์" Text = "ยินดีต้อนรับสู่บทช่วยสอน ASP.Net" ></asp:Label> <br /> <br /> <asp:Button ID = "Button1" runat = "server" onclick = "Button1_Click" ข้อความ ="ข้อมูลลิขสิทธิ์" /> </div> <Tfooter:footer ID="footer1" runat="server" /> </form> </body></html>
เมื่อดำเนินการ ส่วนท้ายของหน้าจะแสดงขึ้นและการควบคุมจะพร้อมใช้งานบนทุกหน้าในไซต์ของคุณ
สังเกตสิ่งต่อไปนี้:
(1) คำสั่ง Register ระบุชื่อป้ายกำกับและคำนำหน้าป้ายกำกับสำหรับตัวควบคุม
<%@ ลงทะเบียน Src="~/footer.ascx" TagName = "footer" TagPrefix = "Tfooter" %>
(2) ควรใช้ชื่อแท็กและคำนำหน้าต่อไปนี้เมื่อเพิ่มการควบคุมผู้ใช้บนเพจ:
<Tfooter:footer ID="footer1" runat="เซิร์ฟเวอร์" />
การควบคุมแบบกำหนดเองจะถูกปรับใช้เป็นคอลเลกชันแยกต่างหาก พวกมันถูกคอมไพล์เป็นไดนามิกลิงก์ไลบรารี (DLL) และใช้เป็นตัวควบคุมบริการ ASP.NET อื่น ๆ สามารถสร้างได้โดยวิธีใดวิธีหนึ่งต่อไปนี้:
โดยการรับการควบคุมแบบกำหนดเองจากการควบคุมที่มีอยู่
สร้างตัวควบคุมแบบกำหนดเองใหม่โดยการรวมตัวควบคุมที่มีอยู่ตั้งแต่สองตัวขึ้นไปเข้าด้วยกัน
โดยรับมันจากคลาสควบคุมพื้นฐาน
เพื่อให้เข้าใจแนวคิดนี้ เรามาสร้างคลาสแบบกำหนดเองที่จะแสดงข้อความบนเบราว์เซอร์กันดีกว่า เพื่อสร้างตัวควบคุม ให้ทำตามขั้นตอนต่อไปนี้:
สร้างเว็บไซต์ใหม่ คลิกขวาที่โซลูชัน (ไม่ใช่โครงการ) ที่ด้านบนของแผนผังใน Solution Explorer
ในกล่องโต้ตอบ New Project ให้เลือก ASP.NET Server Control จากเทมเพลตโครงการ
ขั้นตอนข้างต้นจะเพิ่มโปรเจ็กต์ใหม่และสร้างการควบคุมแบบกำหนดเองที่สมบูรณ์สำหรับโซลูชันที่เรียกว่า ServerControl1 ในตัวอย่างนี้ ให้ฉันตั้งชื่อโปรเจ็กต์ CustomControls เพื่อที่จะใช้การควบคุมนี้ จะต้องเพิ่มเป็นการอ้างอิงไปยังเว็บเพจก่อนที่จะลงทะเบียนบนเพจ หากต้องการเพิ่มการอ้างอิงไปยังโปรเจ็กต์ที่มีอยู่ ให้คลิกขวาที่โปรเจ็กต์ (ไม่ใช่โซลูชัน) แล้วคลิกเพิ่มการอ้างอิง
เลือกโครงการ CustomControl จากแท็บโครงการในกล่องโต้ตอบเพิ่มการอ้างอิง Solution Explorer สามารถแสดงการอ้างอิงได้
หากต้องการใช้ตัวควบคุมบนเพจ ให้เพิ่มคำสั่ง Register ใต้คำสั่ง @Page
<%@ Register Assembly = "CustomControls" Namespace = "CustomControls" TagPrefix = "ccs" %>
นอกจากนี้ คุณสามารถใช้การควบคุมได้เหมือนกับการควบคุมอื่นๆ
<form id="form1" runat="server"> <div> <ccs:ServerControl1 runat="server" Text = "ฉันเป็นตัวควบคุมเซิร์ฟเวอร์แบบกำหนดเอง" /> </div> </form>
เมื่อดำเนินการ คุณสมบัติ ข้อความ ของตัวควบคุมจะแสดงบนเบราว์เซอร์ ดังที่แสดงด้านล่าง:
ในตัวอย่างก่อนหน้านี้ มีการตั้งค่าคุณสมบัติข้อความของคลาสแบบกำหนดเอง ASP.NET เพิ่มคุณสมบัตินี้ตามค่าเริ่มต้นเมื่อมีการสร้างตัวควบคุม รหัสต่อไปนี้หลังจากไฟล์ของตัวควบคุมเปิดเผยสิ่งนี้
การใช้ระบบ;การใช้ System.Collections.Generic;การใช้ System.ComponentModel;การใช้ System.Linq;การใช้ System.Text;การใช้ System.Web;การใช้ System.Web.UI;การใช้ System.Web.UI.WebControls;namespace CustomControls{ [ DefaultProperty("Text")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] สาธารณะ คลาส ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"] ; return ((s == null) ? "[" + this.ID + "]" : s); } ตั้ง { ViewState ["ข้อความ"] = ค่า; } } การแทนที่การป้องกันเป็นโมฆะ RenderContents (เอาต์พุต HtmlTextWriter) { เอาต์พุตเขียน (ข้อความ);
รหัสข้างต้นจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับการควบคุมแบบกำหนดเอง สามารถเพิ่มเหตุการณ์และวิธีการลงในคลาสการควบคุมแบบกำหนดเองได้
มาขยายการควบคุมแบบกำหนดเองก่อนหน้านี้ชื่อ ServerControl1 ลองใช้วิธีที่เรียกว่า checkpalindrome ซึ่งจะอนุญาตให้ตรวจสอบ palindrome ได้
Palindrome คือค่าคำ/ตัวอักษรที่ยังคงสะกดเหมือนเดิมเมื่อกลับด้าน ตัวอย่างเช่น มาลายาลัม มาดาม ซารัส ฯลฯ
ขยายโค้ดสำหรับการควบคุมแบบกำหนดเองของคุณ และควรมีลักษณะดังนี้:
การใช้ระบบ;การใช้ System.Collections.Generic;การใช้ System.ComponentModel;การใช้ System.Linq;การใช้ System.Text;การใช้ System.Web;การใช้ System.Web.UI;การใช้ System.Web.UI.WebControls;namespace CustomControls{ [ DefaultProperty("Text")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] สาธารณะ คลาส ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"] ; return ((s == null) ? "[" + this.ID + "]" : s); } ตั้ง { ViewState ["ข้อความ"] = ค่า; } } การแทนที่การป้องกันเป็นโมฆะ RenderContents(เอาต์พุต HtmlTextWriter) { if (this.checkpanlindrome()) { output.Write("นี่คือ palindrome: <br />"); output.Write("<FONT size=5 color=Blue >"); output.Write("<B>"); output.Write(Text); output.Write("</B>"); output.Write("</FONT>"); else { output.Write("นี่ไม่ใช่พาลินโดรม: <br />"); output.Write("<FONT size=5 color=red>"); output.Write("<B>"); output.Write(Text); output.Write("</B>"); output.Write("</FONT>"); } } บูลที่ได้รับการป้องกัน if (this.Text != null) { String str = this.Text; String strtoupper (); ถ่าน [] rev = strtoupper.ToCharArray (); rev); ถ้า (strtoupper == strrev) { กลับจริง; } อื่น ๆ { กลับเท็จ; } } อื่น ๆ { กลับเท็จ;
เมื่อคุณเปลี่ยนโค้ดของช่องว่าง คุณต้องสร้างวิธีการโดยคลิก Build --> Build Solution เพื่อให้การเปลี่ยนแปลงสะท้อนให้เห็นในโครงการของคุณ เพิ่มกล่องข้อความและปุ่มควบคุมลงในเพจเพื่อให้ผู้ใช้สามารถระบุส่วนของข้อความได้ เมื่อคลิกปุ่ม ระบบจะใช้เพื่อตรวจสอบพาลินโดรม
<form id="form1" runat="server"> <div> ป้อนคำ: <br /> <asp:TextBox ID="TextBox1" runat="server"> </asp:TextBox> <br /> < br /> <asp:Button ID="Button1" runat="server onclick="Button1_Click" Text="ตรวจสอบ Palindrome" /> <br /> <br /> <ccs:ServerControl1 ID="ServerControl11" runat="server" Text = "" /> </div></form>
ตัวจัดการเหตุการณ์การคลิกของปุ่มเพียงแค่คัดลอกข้อความในกล่องข้อความไปยังคุณสมบัติข้อความของตัวควบคุมแบบกำหนดเอง
protected void Button1_Click(object sender, EventArgs e){ this.ServerControl11.Text = this.TextBox1.Text;}
เมื่อดำเนินการ ตัวควบคุมจะตรวจพบพาลินโดรมได้สำเร็จ
สังเกตสิ่งต่อไปนี้:
(1) เมื่อคุณเพิ่มการอ้างอิงไปยังตัวควบคุมแบบกำหนดเอง การอ้างอิงนั้นจะถูกเพิ่มลงในกล่องเครื่องมือ และคุณสามารถใช้งานได้โดยตรงจากกล่องเครื่องมือเช่นเดียวกับตัวควบคุมอื่นๆ
(2) วิธีการ RenderContents ของคลาสการควบคุมแบบกำหนดเองได้ถูกแทนที่แล้ว และคุณสามารถเพิ่มวิธีการและเหตุการณ์ของคุณเองได้
(3) วิธีการ RenderContents ใช้พารามิเตอร์ประเภท HtmlTextWriter ซึ่งจะรับผิดชอบในการแสดงบนเบราว์เซอร์