หน้าชั้นเรียน. เทคโนโลยีการแบ่งปันรหัส การแปลแอปพลิเคชันเว็บแบบง่าย

รูปแบบการออกแบบเป็นการสืบทอดภาพของเพจที่ปรากฏครั้งแรกใน ASP.NET 2.0 คุณสามารถสร้างพื้นฐานสำหรับหน้าแอปพลิเคชันจำนวนเท่าใดก็ได้ เทมเพลตช่วยให้สร้างและบำรุงรักษาแอปพลิเคชันได้ง่ายขึ้น Visual Studio 2005 รองรับการสร้างและแก้ไขเทมเพลตเพจ การบรรยายนี้จะตรวจสอบการใช้เทมเพลตเพจในแอปพลิเคชัน และเริ่มด้วยการอธิบายคุณประโยชน์ต่างๆ

หมายเหตุ: คำศัพท์เฉพาะในพื้นที่นี้ยังไม่ได้รับการตัดสิน หนังสือบางเล่มใช้สำนวน "หน้าต้นแบบ" สามารถใช้คำว่า "มาสเตอร์เพจ" ได้ แม้ว่าอาจสับสนกับ Default.aspx ก็ตาม

เหตุใดคุณจึงต้องมีเทมเพลตการออกแบบหน้า

สำหรับผู้ใช้ทั่วไป ความแตกต่างระหว่างไซต์หนึ่งกับอีกไซต์หนึ่งคือการออกแบบหน้าเว็บที่แตกต่างกัน เว็บไซต์ส่วนใหญ่ในปัจจุบันมีการออกแบบที่เป็นที่รู้จัก ซึ่งทำได้โดยการใช้องค์ประกอบเดียวกันในตำแหน่งเดียวกันบนหน้าต่างๆ ของเว็บไซต์ ดังนั้นการออกแบบเพจจึงแทบไม่มีความสำคัญน้อยไปกว่าฟังก์ชันการทำงานโดยรวม

ตัวอย่างเช่น ดูที่หน้าหลักของเว็บไซต์หนังสือพิมพ์ Komsomolskaya Pravda ในแต่ละวันมีบทความต่างๆ ปรากฏขึ้นที่นั่น แต่การออกแบบยังคงเหมือนเดิม นี่คือโลโก้หนังสือพิมพ์ แผงนำทาง ด้านบน ขวา ซ้าย การจัดอันดับบทความทางด้านขวา แบบฟอร์มสำหรับค้นหา สมัครสมาชิก และเข้าสู่ระบบเมล มีข้อมูลทางกฎหมายที่ด้านล่างของหน้า

นักพัฒนาซอฟต์แวร์บางรายคัดลอกและวางองค์ประกอบที่ซ้ำกันในทุกหน้า สิ่งนี้ไม่มีประสิทธิภาพ หากคุณต้องการเปลี่ยนแปลงรายละเอียดหนึ่งรายการในองค์ประกอบทั่วไปเหล่านี้ จะต้องทำการเปลี่ยนแปลงในทุกหน้า คุณสามารถใส่โค้ดที่ซ้ำกันลงในไฟล์รวมได้โดยใช้คำสั่ง HTML include แต่มันยากมากที่จะเห็นการปรากฏครั้งสุดท้ายของเพจในสภาพแวดล้อมการพัฒนา ใน ASP.NET 1.1 คุณสามารถสร้างได้ องค์ประกอบที่กำหนดเองการจัดการ. คุณสามารถสร้างองค์ประกอบดังกล่าวด้วยเนื้อหาที่ต้องการและวางไว้ในทุกหน้า การพัฒนาแนวคิดนี้คือการสร้างเทมเพลตเพจ นี่เป็นการควบคุมของผู้ใช้ด้วย เพียงแต่ไม่ได้อยู่ในหน้า แต่อยู่ภายนอก

ข้อมูลพื้นฐานเกี่ยวกับมาสเตอร์เพจ

ด้วยเทมเพลตเพจ คุณสามารถกำหนดเนื้อหาทั่วไปบางส่วนและใส่ลงในเพจที่มีนามสกุล .master โดยปกติแล้ว อาจมีหน้าดังกล่าวหลายหน้าในแอปพลิเคชัน เทมเพลตนี้สามารถใช้ได้กับเพจย่อยจำนวนเท่าใดก็ได้ ซึ่งเหมือนกับเพจทั่วไปที่มีนามสกุล aspx

เริ่มจากการบรรยายนี้ เราจะวิเคราะห์โครงการที่ Visual Studio 2005 สร้างขึ้นโดยใช้เทมเพลต Personal Web Site Starter Kit โดยจะแสดงเทมเพลตเพจ ธีม และการตั้งค่าส่วนบุคคล และการนำทาง ตัวควบคุมการนำทางจะอยู่ตรงกลางหน้าเทมเพลต Default.master และนี่คือวิธีแก้ปัญหาตามธรรมชาติ เนื่องจากจำเป็นต้องมีการนำทางในทุกที่

หน้าเทมเพลตยังรวมถึงส่วนหัวและส่วนท้ายทั่วไปด้วย

นี่เป็นเพจประเภทเดียวที่สามารถวางส่วนควบคุม ContentPlaceHolder พิเศษได้ โดยจะกำหนดตำแหน่งที่เพจย่อยของวิซาร์ดที่กำหนดสามารถวางเนื้อหาของตนเองได้ เมื่อ ASP.NET ได้รับการร้องขอให้แสดงเพจย่อย จะผสานโค้ดกับโค้ด หน้าแรกด้วยเหตุนี้ HTML จึงถูกสร้างขึ้นโดยไม่สามารถมองเห็น "ตะเข็บ" ได้

เมื่อไร หน้าย่อยแก้ไขในสภาพแวดล้อมการพัฒนา บนแท็บออกแบบ หน้าเต็มจะมองเห็นได้พร้อมกับองค์ประกอบจากเทมเพลต แต่จะแสดงขึ้นมา สีเทา- ไม่สามารถแก้ไขได้ คุณสามารถแก้ไขสิ่งที่อยู่ในองค์ประกอบเนื้อหาได้

ในกล่องโต้ตอบเพิ่มรายการใหม่ ให้เลือกประเภทหน้ามาสเตอร์เพจ เช่นเดียวกับเพจทั่วไป สามารถสร้างได้ด้วยโค้ดที่อยู่ด้านหลังเพจหรือด้วยโค้ดที่ฝังอยู่ในเพจ สิ่งนี้ไม่ส่งผลกระทบต่อรูปแบบการใช้โค้ดร่วมกันของเพจย่อย+แต่อย่างใด นอกจากนี้ หน้าหลักและหน้ารองสามารถพัฒนาเป็นภาษาต่างๆ ได้

เพื่อให้มีการแบ่งหน้าออกเป็นส่วนตรรกะอย่างชัดเจน จึงมีการใช้ตาราง มาสร้างตารางที่มี 3 แถวกัน โดยที่ บรรทัดบนสุดมีชื่อของทุกหน้าส่วนที่สองมีเนื้อหาที่กำหนดเองประกอบด้วยสองเซลล์ซึ่งแต่ละเซลล์มีหนึ่ง ContentPlaceHolder แถวล่างมีข้อมูลทางกฎหมาย ตารางถูกสร้างขึ้นอย่างง่ายดายจากเมนูเค้าโครง-แทรกตาราง สร้างตารางขนาด 2 คูณ 3 หลังจากนั้นให้ผสานเซลล์ที่ด้านบนและ เส้นด้านล่างและแทรก ContentPlaceHolder เข้าไปตรงกลาง สร้างเนื้อหาส่วนหัวและส่วนท้าย คุณควรจะได้หน้าแบบนี้:

สวัสดี!
โรงเรียนสอนเขียนโปรแกรม ASP.NET 2.0
ลิขสิทธิ์ © 2006 - โรงเรียน ASP.NET 2.0

ข้อแตกต่างประการแรกระหว่างเพจนี้กับเพจปกติคือเริ่มต้นด้วยคำสั่งหลัก ไม่ใช่เพจ คลาสมาสเตอร์เพจถูกกำหนดไว้ในไฟล์ MasterPage.master.cs

MasterPage คลาสสาธารณะบางส่วน: System.Web.UI.MasterPage ( ป้องกันเป็นโมฆะ Page_Load (ผู้ส่งวัตถุ EventArgs e) ( ) )

คลาสเทมเพลตเป็นผู้สืบทอดของ System.Web.UI.MasterPage ซึ่งจะสืบทอดมาจาก System.Web.UI.UserControl

อาจมีการควบคุมและโค้ด HTML กิจกรรมหน้าสามารถประมวลผลได้ 2 องค์ประกอบ ContentPlaceHolder ระบุตำแหน่งที่มีการแทรกเนื้อหาของหน้าที่สืบทอด

ตอนนี้คุณต้องสร้างหน้าเนื้อหา มันถูกสร้างขึ้นตามปกติ เฉพาะช่องทำเครื่องหมายที่ระบุว่าเลือกมาสเตอร์เพจเท่านั้นที่ถูกเลือก กล่องโต้ตอบจะปรากฏขึ้นโดยคุณต้องเลือกเทมเพลตเพจ

แต่ในกรณีนี้ การกำหนดหน้าหลักในคำสั่ง Page จะมีความสำคัญมากกว่าการกำหนดในระดับแอปพลิเคชัน การตั้งค่า web.config มีผลกับเพจที่ไม่มีการระบุ masterPageFile แต่มีการกำหนดตัวควบคุมเนื้อหา การตั้งค่านี้ไม่มีผลกับเพจ aspx ปกติ

ไม่สามารถกำหนดเทมเพลตให้กับทุกเพจได้ แต่สามารถเลือกได้เช่นอยู่ในโฟลเดอร์แอปพลิเคชันเฉพาะ

องค์ประกอบตำแหน่งถูกแทรกลงในโหนดการกำหนดค่าหลัก ซึ่งระบุว่าหน้าทั้งหมดในโฟลเดอร์ Lectures ใช้หน้าเทมเพลต Lectures.master

เพจที่สืบทอดต่อจากเทมเพลตสามารถมีได้เฉพาะองค์ประกอบประเภทเนื้อหา ซึ่งแต่ละองค์ประกอบสอดคล้องกับองค์ประกอบ ContentPlaceHolder หนึ่งองค์ประกอบของเทมเพลต คุณไม่สามารถแทรกเนื้อหานอกองค์ประกอบเหล่านี้ได้ มิฉะนั้น ASP.NET จะไม่สามารถรวมหน้าหลักกับหน้าเนื้อหาได้ ContentPlaceHolder ID ต้องตรงกับแอตทริบิวต์ ContentPlaceHolderID ขององค์ประกอบเนื้อหาที่เกี่ยวข้อง

โปรแกรมสร้างเพจลูกที่มี 2 คอนโทรลเนื้อหา หากคุณสลับไปที่แท็บออกแบบ องค์ประกอบเนื้อหาทั้งสองนี้จะแสดงเป็นรูปสี่เหลี่ยมผืนผ้าว่างติดกัน เนื่องจากอยู่ในเซลล์ตารางสองเซลล์ที่อยู่ติดกันในเทมเพลต คำสั่งของเพจแตกต่างจากคำสั่งปกติ นอกเหนือจากแอตทริบิวต์ MasterPageFile จากการมีอยู่ แอตทริบิวต์ชื่อเรื่อง- เนื่องจากแท็ก , , ได้รับการสืบทอดมาจากไฟล์เทมเพลต นี่เป็นวิธีเดียวที่จะแทนที่ส่วนหัวของเบราว์เซอร์ แทนที่ค่าแอตทริบิวต์

หากคุณดูหน้าผลลัพธ์ในเบราว์เซอร์ คุณจะเห็นว่าส่วนหัวของเบราว์เซอร์สะท้อนถึงการเปลี่ยนแปลง รหัส HTML ของหน้าประกอบด้วย

หน้าเพจจะแสดงเฉพาะเนื้อหาที่ระบุในหน้าเทมเพลตเท่านั้น

เทมเพลตสามารถแก้ไขได้ทุกเมื่อ และการเปลี่ยนแปลงจะปรากฏบนเพจที่ได้รับมาทั้งหมด ตัวอย่างเช่น ลองเพิ่มรูปภาพก่อนข้อความชื่อเรื่อง

(สามารถพบได้ในการติดตั้ง .NET "Microsoft.NET\Framework\v2.0.xxx\ASP.NETWebAdminFiles\Images)

ตอนนี้หน้าลูกในเบราว์เซอร์มีลักษณะดังนี้:

มีอีกวิธีหนึ่งในการเปลี่ยนชื่อเบราว์เซอร์โดยทางโปรแกรม เพจที่มีเทมเพลตจะมีคุณสมบัติหลัก แน่นอนว่าทุกหน้ามี แต่สำหรับหน้าธรรมดาจะเป็น Null คุณสามารถเข้าถึงคุณสมบัติทั้งหมดของหน้าหลักได้ คุณสมบัตินี้เป็นแบบอ่านอย่างเดียว

หน้าหลักสามารถกำหนดเนื้อหาที่จะแสดงตามค่าเริ่มต้นได้ มันถูกวางไว้ในองค์ประกอบ ContentPlaceHolder และสืบทอดมาจากเพจย่อยทั้งหมด เว้นแต่ว่าเพจย่อยจะแทนที่เนื้อหาเริ่มต้น เพจนั้นจะถูกนำมาใช้เมื่อมีการแสดง มาสร้างตัวควบคุม SiteMapPath ซึ่งเราจะวางไว้ใน ContentPlaceHolder1

มันจะไม่ปรากฏบนหน้า MainSchool.aspx เนื่องจากมีการกำหนดองค์ประกอบเนื้อหาทั้งสองไว้ที่นั่น แต่ถ้าเข้า. หน้าต่อไปมีการกำหนดองค์ประกอบเนื้อหาเพียงรายการเดียวเท่านั้น:

คุณชอบภาษาโปรแกรมอะไร
asp:RadioButtonList ID = "rblVoting" runat = "เซิร์ฟเวอร์" DataSourceID = "SqlDataSource1" DataTextField = "ตัวแปร" DataValueField = "id">


หากดูในเบราว์เซอร์เราจะเห็นว่าอยู่ทางด้านซ้าย” เศษขนมปัง» จะปรากฏขึ้น

วัตถุประสงค์ด้านซอฟต์แวร์ของหน้าหลัก

ในเพจเนื้อหา คุณสามารถกำหนดเพจหลักใหม่โดยทางโปรแกรมได้ ในการดำเนินการนี้ คุณจะต้องกำหนดค่าที่ต้องการให้กับคุณสมบัติ Page.MasterPageFile เทมเพลตจะเปลี่ยนโดยไม่คำนึงถึงเทมเพลตที่ได้รับมอบหมายในคำสั่ง @Page แต่ถ้าคุณพยายามทำเช่นนี้ในฟังก์ชัน Page_Load หรือ Page_Init คุณจะได้รับข้อผิดพลาดรันไทม์

คุณสมบัตินี้สามารถเปลี่ยนแปลงได้ในระหว่างเหตุการณ์ Page_PreInit เท่านั้น เหตุการณ์ Page_PreInit คือช่วงแรกสุดของวงจรชีวิตของเพจที่สามารถเข้าถึงได้ ในระหว่างกิจกรรม Init หน้าหลักและหน้ารองได้รวมเข้าด้วยกันแล้ว ดังนั้นจึงสายเกินไปที่จะเปลี่ยนเทมเพลต ด้วยเหตุนี้ เหตุการณ์ Page_PreInit จึงเป็นเหตุการณ์เดียวที่ตัวจัดการสามารถทำงานกับหน้าหลักแยกจากหน้าเนื้อหาได้

หน้าเทมเพลตสามารถมีวิธีการและคุณสมบัติได้ เพื่อให้สามารถเข้าถึงได้ คุณต้องใช้คำสั่ง @MasterType ในกรณีนี้ คลาสเพจเทมเพลตการออกแบบจะพร้อมใช้งานผ่านลิงก์ที่พิมพ์อย่างยิ่ง แอตทริบิวต์ TypeName ระบุชื่อของประเภท และ VirtualPath ระบุเส้นทางที่เกี่ยวข้องกับไดเร็กทอรีรากของแอปพลิเคชันเว็บไปยังไฟล์เทมเพลต

วิธีนี้ช่วยให้เพจสามารถเข้าถึงคุณสมบัติขององค์ประกอบจากภายนอกได้

ถือเป็นโมฆะ Page_Load() ( Master.FooterText = "นี่คือส่วนท้ายที่กำหนดเอง"; AdRotator ad = (AdRotator)Master.FindControl("MyAdRotator"); if (ad != null) ( ad.BorderColor = System. Drawing.Color. สีม่วง; ad.BorderWidth = 10;
หน้าต้นแบบที่ซ้อนกัน

เทมเพลตการออกแบบสามารถสืบทอดเทมเพลตอื่นได้ ตัวอย่างเช่น ไซต์ประกอบด้วยหลายส่วน หน้าเว็บไซต์ทั้งหมดมีองค์ประกอบร่วมกัน และหน้าส่วนทั้งหมดมีองค์ประกอบอื่นๆ ทั่วไป เว็บไซต์ร้านดอกไม้ประกอบด้วยส่วนต่างๆ สำหรับดอกไม้ยืนต้นและดอกไม้ประจำปี เทมเพลตถูกสร้างขึ้นสำหรับผู้ที่สืบทอดเทมเพลตไซต์ทั่วไป

ไม้ยืนต้น

หน้าที่อธิบายแดฟโฟดิลอยู่ในส่วนดอกไม้ยืนต้นและสืบทอดเทมเพลต SectionPerrenials

ดอกแดฟโฟดิลจะบานในช่วงต้นฤดูใบไม้ผลิและต้อนรับฤดูปลูก
ลำดับเหตุการณ์

เมื่อเพจคอมโพสิตถูกแสดงผลบนเซิร์ฟเวอร์ ทั้งหน้าเทมเพลตและเหตุการณ์หน้าเนื้อหาจะเกิดขึ้น ลำดับของเหตุการณ์เหล่านี้มีประโยชน์ในการทราบว่าเราต้องการเขียนโปรแกรมตัวจัดการหรือไม่

การเริ่มต้นการควบคุมหน้าต้นแบบที่ซ้อนกัน

การเริ่มต้นการควบคุมหน้าเนื้อหาที่ซ้อนกัน

การเริ่มต้นหน้าหลักนั้นเอง

กำลังเริ่มต้นหน้าเนื้อหา

Page_LoadComplete เหตุการณ์ของหน้าเนื้อหา

มีการแนะนำเหตุการณ์ LoadComplete เพื่อให้องค์ประกอบของหน้าหลักที่สร้างขึ้นใน Page_Load สามารถเข้าถึงได้จากหน้าเนื้อหา สิ่งนี้ไม่สามารถทำได้ในตัวจัดการ Page_Load ของหน้าเนื้อหา เนื่องจากมีการโหลดก่อนหน้าหลัก

หน้าเทมเพลตเฉพาะแพลตฟอร์ม

ในหลายกรณีมีการพัฒนาแอปพลิเคชั่นให้ดู ประเภทต่างๆตู้คอนเทนเนอร์ มันสามารถเป็นได้ เบราว์เซอร์ต่างๆหรือเว็บเบราว์เซอร์บนพีดีเอและโทรศัพท์มือถือ

ดังนั้น ASP.NET 2.0 ช่วยให้คุณสามารถกำหนดหน้าเทมเพลตที่แตกต่างกันสำหรับคอนเทนเนอร์เฉพาะในแอตทริบิวต์ MasterPageFile ของคำสั่ง Page

บทสรุป

เมื่อสร้างแอปที่ทุกหน้ามีส่วนหัว ส่วนท้าย และการนำทางร่วมกัน ชีวิตจะง่ายขึ้นด้วยรูปแบบการออกแบบ ใช้งานง่ายและสามารถเปลี่ยนแปลงได้ตลอดเวลาโดยอัปเดตแอปพลิเคชันทั้งหมด

หน้าต้นแบบ ASP.NET ช่วยให้คุณสร้างเค้าโครงที่สอดคล้องกันสำหรับหน้าในแอปพลิเคชันของคุณ หน้าต้นแบบหน้าเดียวจะกำหนดรูปลักษณ์และลักษณะการทำงานมาตรฐานที่คุณต้องการสำหรับหน้าทั้งหมด (หรือกลุ่มของหน้า) ในแอปพลิเคชันของคุณ จากนั้นคุณสามารถสร้างหน้าเนื้อหาแต่ละหน้าที่มีเนื้อหาที่คุณต้องการแสดงได้ เมื่อผู้ใช้ร้องขอเพจเนื้อหา ผู้ใช้จะรวมเข้ากับเพจต้นแบบเพื่อสร้างเอาต์พุตที่รวมโครงร่างของเพจต้นแบบเข้ากับเนื้อหาจากเพจเนื้อหา

มาสเตอร์เพจทำงานอย่างไร

จริงๆ แล้วหน้าต้นแบบประกอบด้วยสองส่วน คือ หน้าต้นแบบและหน้าเนื้อหาหนึ่งหน้าหรือมากกว่านั้น

หน้าต้นแบบ

มาสเตอร์เพจคือไฟล์ ASP.NET ที่มีนามสกุล .master (เช่น MySite.master) พร้อมด้วยโครงร่างที่กำหนดไว้ล่วงหน้าซึ่งสามารถรวมข้อความคงที่ องค์ประกอบ HTML และการควบคุมเซิร์ฟเวอร์ได้ หน้าต้นแบบจะถูกระบุด้วยคำสั่งพิเศษที่แทนที่คำสั่งที่ใช้สำหรับหน้า .aspx ทั่วไป คำสั่งมีลักษณะดังต่อไปนี้

คำสั่ง @ Master สามารถมีคำสั่งเดียวกันส่วนใหญ่ที่คำสั่งสามารถมีได้ ตัวอย่างเช่น คำสั่งมาสเตอร์เพจต่อไปนี้รวมชื่อของไฟล์ที่อยู่เบื้องหลังโค้ด และกำหนดชื่อคลาสให้กับเพจต้นแบบ

นอกเหนือจากคำสั่ง @ Master แล้ว หน้าต้นแบบยังประกอบด้วยองค์ประกอบ HTML ระดับบนสุดทั้งหมดสำหรับหน้า เช่น html, head และ form ตัวอย่างเช่น บนเพจต้นแบบ คุณอาจใช้ตาราง HTML สำหรับเลย์เอาต์ องค์ประกอบ img สำหรับโลโก้บริษัทของคุณ ข้อความคงที่สำหรับประกาศเกี่ยวกับลิขสิทธิ์ และการควบคุมเซิร์ฟเวอร์เพื่อสร้างการนำทางมาตรฐานสำหรับไซต์ของคุณ คุณสามารถใช้ HTML ใดก็ได้ และอย่างใดอย่างหนึ่งองค์ประกอบ ASP.NET เป็นส่วนหนึ่งของหน้าหลักของคุณ

ตัวยึดตำแหน่งเนื้อหาที่ถอดเปลี่ยนได้

นอกจากข้อความคงที่และการควบคุมที่จะปรากฏบนทุกหน้าแล้ว หน้าต้นแบบยังมีการควบคุมตั้งแต่หนึ่งรายการขึ้นไปอีกด้วย ตัวควบคุมตัวยึดตำแหน่งเหล่านี้จะกำหนดขอบเขตที่เนื้อหาที่สามารถแทนที่ได้จะปรากฏขึ้น ในทางกลับกัน เนื้อหาที่ทดแทนได้ถูกกำหนดไว้ในหน้าเนื้อหา หลังจากที่คุณได้กำหนดตัวควบคุมแล้ว หน้าต้นแบบอาจมีลักษณะดังนี้

ชื่อหน้าหลัก

ชื่อหน้าหลัก

หน้าเนื้อหา

คุณกำหนดเนื้อหาสำหรับตัวควบคุมตัวแทนของเพจต้นแบบโดยการสร้างเพจเนื้อหาแต่ละเพจ ซึ่งเป็นเพจ ASP.NET (ไฟล์ .aspx และไฟล์ที่อยู่เบื้องหลังโค้ด) ที่ถูกผูกไว้กับเพจต้นแบบเฉพาะ การผูกข้อมูลจะถูกสร้างขึ้น ในคำสั่ง @ Page ของหน้าเนื้อหาโดยรวมแอตทริบิวต์ที่ชี้ไปยังหน้าหลักที่จะใช้ ตัวอย่างเช่น เพจเนื้อหาอาจมีคำสั่ง @ Page ต่อไปนี้ ซึ่งผูกเข้ากับเพจ Master1.master

ในเพจเนื้อหา คุณสร้างเนื้อหาโดยการเพิ่มตัวควบคุมและแม็ปตัวควบคุมบนเพจหลัก ตัวอย่างเช่น หน้าต้นแบบอาจมีตัวแทนเนื้อหาที่เรียกว่าหลักและส่วนท้าย ในหน้าเนื้อหา คุณสามารถสร้างตัวควบคุมสองตัว ตัวควบคุมตัวหนึ่งถูกแมปกับ ควบคุมหลักและอีกอันแมปกับส่วนท้ายของตัวควบคุม ดังแสดงในรูปต่อไปนี้

การแทนที่เนื้อหาตัวยึดตำแหน่ง

โดยทั่วไป โครงสร้างนี้ไม่มีผลกระทบต่อวิธีสร้างเพจหรือตั้งโปรแกรมเพจของคุณ อย่างไรก็ตาม ในบางกรณี ถ้าคุณตั้งค่าคุณสมบัติทั้งหน้าบนหน้าต้นแบบ อาจส่งผลต่อลักษณะการทำงานของหน้าเนื้อหาได้ เนื่องจากหน้าหลักเป็นพาเรนต์ที่ใกล้เคียงที่สุดสำหรับตัวควบคุมบนหน้า ตัวอย่างเช่น หากคุณตั้งค่าคุณสมบัติบนเพจเนื้อหาเป็นจริง แต่ตั้งค่าคุณสมบัติเดียวกันนั้นเป็นเท็จในหน้าต้นแบบ สถานะการดูจะถูกปิดใช้งานอย่างได้ผลเนื่องจากการตั้งค่าบนเพจต้นแบบจะมีลำดับความสำคัญ

เส้นทางเพจหลักและหน้าเนื้อหา

เมื่อมีการร้องขอหน้าเนื้อหา เนื้อหาจะถูกรวมเข้ากับหน้าหลัก และหน้าจะทำงานในบริบทของหน้าเนื้อหา ตัวอย่างเช่น ถ้าคุณได้รับคุณสมบัติของออบเจ็กต์ ไม่ว่าจะเป็นในโค้ดของหน้าเนื้อหาหรือในโค้ดของเพจหลัก เส้นทางจะแสดงถึงตำแหน่งของหน้าเนื้อหา

หน้าหลักและหน้าเนื้อหาไม่จำเป็นต้องอยู่ในโฟลเดอร์เดียวกัน ตราบใดที่แอตทริบิวต์ในคำสั่ง @ Page ของหน้าเนื้อหาแก้ไขเป็นหน้า .master แล้ว ASP.NET ก็สามารถรวมเนื้อหาและหน้าหลักเป็นหน้าที่แสดงผลหน้าเดียวได้

การอ้างอิงทรัพยากรภายนอก

ทั้งหน้าเนื้อหาและหน้าต้นแบบสามารถมีการควบคุมและองค์ประกอบที่อ้างอิงทรัพยากรภายนอก ตัวอย่างเช่น ทั้งสองอาจมีตัวควบคุมรูปภาพที่อ้างอิงไฟล์รูปภาพ หรืออาจมีจุดยึดที่อ้างอิงถึงหน้าอื่น

บริบทสำหรับเนื้อหาที่ผสานและหน้าต้นแบบคือบริบทของหน้าเนื้อหา ซึ่งอาจส่งผลต่อวิธีระบุ URL สำหรับทรัพยากร เช่น ไฟล์รูปภาพและหน้าเป้าหมายในจุดยึด

การควบคุมเซิร์ฟเวอร์

ในการควบคุมเซิร์ฟเวอร์บนเพจหลัก ASP.NET จะปรับเปลี่ยน URL ของคุณสมบัติที่อ้างอิงถึงทรัพยากรภายนอกแบบไดนามิก ตัวอย่างเช่น คุณอาจวางตัวควบคุมบนเพจต้นแบบและตั้งค่าคุณสมบัติให้สัมพันธ์กับเพจต้นแบบ ที่ เวลาทำงาน ASP.NET จะแก้ไข URL เพื่อให้แก้ไขได้อย่างถูกต้องในบริบทของหน้าเนื้อหา

ASP.NET สามารถแก้ไข URL ในกรณีต่อไปนี้:

    URL เป็นคุณสมบัติของการควบคุมเซิร์ฟเวอร์ ASP.NET

    คุณสมบัติถูกทำเครื่องหมายภายในในการควบคุมว่าเป็น URL (คุณสมบัติถูกทำเครื่องหมายด้วยแอตทริบิวต์ ) ในทางปฏิบัติ คุณสมบัติการควบคุมเซิร์ฟเวอร์ ASP.NET ที่ใช้กันทั่วไปในการอ้างอิงทรัพยากรภายนอกจะถูกทำเครื่องหมายด้วยวิธีนี้

องค์ประกอบอื่นๆ

ASP.NET ไม่สามารถแก้ไข URL บนองค์ประกอบนั้นได้ ไม่ได้การควบคุมเซิร์ฟเวอร์ ตัวอย่างเช่น หากคุณใช้องค์ประกอบ img บนเพจหลักและตั้งค่าแอตทริบิวต์ src ให้เป็น URL ASP.NET จะไม่แก้ไข URL ในกรณีนั้น URL จะได้รับการแก้ไขในบริบทของหน้าเนื้อหาและสร้าง URL ตามนั้น

โดยทั่วไป เมื่อทำงานกับองค์ประกอบบนเพจต้นแบบ ขอแนะนำให้คุณใช้การควบคุมเซิร์ฟเวอร์ แม้แต่องค์ประกอบที่ไม่ต้องใช้รหัสเซิร์ฟเวอร์ก็ตาม ตัวอย่างเช่น แทนที่จะใช้องค์ประกอบ img ให้ใช้การควบคุมเซิร์ฟเวอร์ ด้วยวิธีนี้ ASP.NET สามารถแก้ไข URL ได้อย่างถูกต้อง และคุณสามารถหลีกเลี่ยงปัญหาการบำรุงรักษาที่อาจเกิดขึ้นได้หากคุณย้ายหน้าหลักหรือเนื้อหา

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการระบุเส้นทางสำหรับการควบคุมเซิร์ฟเวอร์ ASP.NET ดูเส้นทางเว็บไซต์ ASP.NET

หน้าต้นแบบและธีม

คุณไม่สามารถใช้ธีม ASP.NET กับเพจหลักได้โดยตรง หากคุณเพิ่มแอตทริบิวต์ของธีมให้กับคำสั่ง @ Master หน้าเว็บจะทำให้เกิดข้อผิดพลาดเมื่อทำงาน

อย่างไรก็ตาม ธีมจะถูกนำไปใช้กับหน้าต้นแบบภายใต้สถานการณ์เหล่านี้:

    หากมีการกำหนดธีมในหน้าเนื้อหา หน้าต้นแบบได้รับการแก้ไขในบริบทของหน้าเนื้อหา ดังนั้นธีมของหน้าเนื้อหาจึงถูกนำไปใช้กับหน้าต้นแบบเช่นกัน

    หากไซต์โดยรวมได้รับการกำหนดค่าให้ใช้ธีมโดยรวมคำจำกัดความของธีมในองค์ประกอบ

หน้าต้นแบบการกำหนดขอบเขต

คุณสามารถแนบหน้าเนื้อหาเข้ากับหน้าต้นแบบได้สามระดับ:

    ในระดับเพจ คุณสามารถใช้คำสั่งเพจในแต่ละเพจเนื้อหาเพื่อผูกเข้ากับเพจหลักได้ ดังตัวอย่างโค้ดต่อไปนี้

    ในระดับแอปพลิเคชัน โดยการตั้งค่าในองค์ประกอบเพจของไฟล์การกำหนดค่าของแอปพลิเคชัน (Web.config) คุณสามารถระบุได้ว่าเพจ ASP.NET ทั้งหมดในแอปพลิเคชัน (ไฟล์ .aspx) ในแอปพลิเคชันจะผูกเข้ากับเพจหลักโดยอัตโนมัติ องค์ประกอบอาจมีลักษณะดังนี้

    ถ้าคุณใช้กลยุทธ์นี้ หน้า ASP.NET ทั้งหมดในแอปพลิเคชันที่มีตัวควบคุมจะถูกรวมเข้ากับหน้าหลักที่ระบุ (ถ้าเพจ ASP.NET ไม่มีตัวควบคุม จะไม่ใช้เพจต้นแบบ)

    ที่ระดับโฟลเดอร์ กลยุทธ์นี้เหมือนกับการผูกข้อมูลในระดับแอปพลิเคชัน ยกเว้นว่าคุณทำการตั้งค่าในไฟล์ Web.config ในโฟลเดอร์เดียวเท่านั้น การผูกเพจต้นแบบแล้วนำไปใช้กับเพจ ASP.NET ในโฟลเดอร์นั้น

สวัสดี w3ii ในรูปแบบ HTML

รหัสนี้แสดงตัวอย่างเป็นหน้า HTML:




สวัสดี w3ii!


firstpage.htm" และยังสร้างลิงก์ไปยังไฟล์ในลักษณะนี้: firstpage.htm

สวัสดี w3ii ใน ASP.NET

วิธีที่ง่ายที่สุดในการแปลง หน้า HTMLในหน้า ASP.NET เพื่อคัดลอกไฟล์ HTML ไปเป็นไฟล์ใหม่ที่มีนามสกุล .aspx

รหัสนี้แสดงตัวอย่างของเราในหน้า ASP.NET:




สวัสดี w3ii!


หากคุณต้องการลองด้วยตัวเอง ให้บันทึกโค้ดในไฟล์ชื่อ "firstpage.aspx" และสร้างลิงก์ไปยังไฟล์ในลักษณะนี้: firstpage.aspx

มันทำงานอย่างไร?

โดยพื้นฐานแล้ว หน้า ASP.NET จะเหมือนกับหน้า HTML ทุกประการ

หน้า HTML มีนามสกุล .htm หากเบราว์เซอร์ร้องขอเพจ HTML จากเซิร์ฟเวอร์ เซิร์ฟเวอร์จะส่งเพจไปยังเบราว์เซอร์โดยไม่มีการเปลี่ยนแปลงใดๆ

เพจ ASP.NET มีนามสกุล .aspx หากเบราว์เซอร์ร้องขอเพจ ASP.NET เซิร์ฟเวอร์จะประมวลผลใดๆ รหัสปฏิบัติการก่อนที่ผลลัพธ์จะถูกส่งกลับไปยังเบราว์เซอร์

หน้า ASP.NET ด้านบนไม่มีโค้ดที่ปฏิบัติการได้ ดังนั้นจึงไม่มีการดำเนินการใดๆ ในตัวอย่างต่อไปนี้ เราจะเพิ่มโค้ดเพจที่ปฏิบัติการได้เพื่อแสดงความแตกต่างระหว่างเพจ HTML แบบคงที่และเพจไดนามิก หน้า ASP.

ASP แบบคลาสสิก

Active Server Pages (ASP) มีมาหลายปีแล้ว ด้วย ASP คุณสามารถวางโค้ดปฏิบัติการได้ในหน้า HTML

ASP เวอร์ชันก่อนหน้า (ก่อน ASP .NET) มักเรียกว่า ASP แบบคลาสสิก

ASP.NET เข้ากันไม่ได้กับ Classic ASP อย่างสมบูรณ์ แต่เพจ Classic ASP ส่วนใหญ่จะทำงานได้ดีเหมือนเพจ ASP.NET โดยมีการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้น

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ ASP แบบคลาสสิก โปรดไปที่บทช่วยสอน ASP ของเรา

หน้าไดนามิกใน ASP แบบคลาสสิก

เพื่อสาธิตวิธีที่ ASP สามารถแสดงผลเพจด้วยเนื้อหาไดนามิก เราได้เพิ่มโค้ดปฏิบัติการบางส่วน (สีแดง) ในตัวอย่างก่อนหน้านี้:




สวัสดี w3ii!




รหัสภายในแท็กถูกดำเนินการบนเซิร์ฟเวอร์

Response.Write เป็นโค้ด ASP สำหรับการเขียนบางอย่างลงในสตรีมเอาต์พุต HTML

Now() เป็นฟังก์ชันส่งคืนวันที่และเวลาปัจจุบันของเซิร์ฟเวอร์

หากคุณต้องการลองด้วยตัวเอง ให้บันทึกโค้ดลงในไฟล์ชื่อ "dynpage.asp" และสร้างลิงก์ไปยังไฟล์ในลักษณะนี้: dynpage.asp

หน้าไดนามิกใน ASP .NET

รหัสนี้แสดงตัวอย่างของเราในหน้า ASP.NET:




สวัสดี w3ii!




หากคุณต้องการลองด้วยตัวเอง ให้บันทึกโค้ดในไฟล์ชื่อ "dynpage.aspx" และสร้างลิงก์ไปยังไฟล์ในลักษณะนี้: dynpage.aspx

ASP.NET กับ ASP แบบคลาสสิก

ตัวอย่างก่อนหน้านี้ไม่แสดงให้เห็นถึงความแตกต่างระหว่าง ASP.NET และ ASP แบบคลาสสิก

ดังที่คุณเห็นจากสองตัวอย่างสุดท้าย ไม่มีความแตกต่างระหว่างเพจ ASP และ ASP.NET ทั้งสองเพจนี้

ในบทต่อไปนี้ คุณจะเห็นวิธีทำให้การควบคุมเซิร์ฟเวอร์ ASP.NET มีประสิทธิภาพมากกว่า ASP แบบคลาสสิก

การสัมภาษณ์ที่ไม่ค่อยเกิดขึ้นบน ASP.NET อาจไม่สมบูรณ์หากไม่มีคำถามเกี่ยวกับวงจรชีวิตของเพจใน ASP.NET Web Forms (ต่อไปนี้จะเรียกว่า ASP.NET โดยย่อ) เรามาลองทำความเข้าใจกับปัญหานี้กัน ฉันแบ่งหัวข้อออกเป็นสอง ในบทความนี้ เราจะดูที่ขั้นตอนของวงจรชีวิตเพจใน ASP.NET

วงจรการใช้งานแผนทั่วไปของเพจ ASP.NET
  • การรับและประมวลผลคำขอเพจโดยเว็บเซิร์ฟเวอร์ IIS
  • ผ่านการร้องขอไปยังรันไทม์ ASP.NET เพิ่มเติม
  • รันไทม์:

    * โหลดคลาสของเพจที่ถูกเรียก * ตั้งค่าคุณสมบัติของคลาสเพจ * สร้างแผนผังขององค์ประกอบ * เติมคุณสมบัติคำขอและการตอบสนอง * เรียกใช้เมธอด ``` IHttpHandler.ProcessRequest```

ขั้นตอน

มี 8 ขั้นตอนหลัก สิ่งนี้แสดงให้เห็นอย่างชัดเจนโดยแผนภาพต่อไปนี้

คำอธิบายเวที
หน้าขอ คำขอเพจเกิดขึ้นก่อนที่วงจรชีวิตของเพจจะเริ่มต้น ผู้ใช้ทำการร้องขอ รันไทม์ ASP.NET จะกำหนดว่าเพจควรถูกคอมไพล์และเริ่มต้นหรือไม่ วงจรชีวิตหรือคุณสามารถส่งคืนหน้าที่แคชเป็นการตอบกลับโดยไม่ต้องดำเนินการหน้านั้น
เริ่มการประมวลผล ในขั้นตอนนี้ คุณสมบัติการตอบสนองและการร้องขอและคุณสมบัติ UICulture จะถูกตั้งค่า ขั้นตอนนี้ยังกำหนดด้วยว่าเพจนี้ได้รับการร้องขออันเป็นผลมาจาก postback หรือไม่ และตั้งค่าคุณสมบัติ IsPostBack ให้สอดคล้องกัน
การเริ่มต้นเพจ เมื่อถึงเวลาเริ่มต้นเพจ การควบคุมผู้ใช้ย่อยทั้งหมดได้ถูกสร้างขึ้นแล้วและมีการตั้งค่าคุณสมบัติ UniqueID ในขณะนี้ ธีมจะถูกนำไปใช้กับเพจ หากเพจถูกเรียกอันเป็นผลมาจาก postback แสดงว่าข้อมูลที่ส่งไปยังเซิร์ฟเวอร์ยังไม่ได้ถูกโหลดเข้าสู่คุณสมบัติของตัวควบคุมในขั้นตอนนี้
หากเพจถูกเรียกอันเป็นผลมาจาก postback ดังนั้นในขั้นตอนนี้คุณสมบัติของการควบคุมจะถูกตั้งค่าตามข้อมูลสถานะ (ViewState และ ControlState)
การตรวจสอบ วิธีการ Validate() ถูกเรียกใช้สำหรับเครื่องมือตรวจสอบความถูกต้องทั้งหมดบนเพจ
การประมวลผลย้อนกลับ ตัวจัดการเหตุการณ์จะถูกเรียกหากมีการย้อนกลับเกิดขึ้น
กำลังเรนเดอร์ ข้อมูลสถานะจะถูกบันทึกไว้ จากนั้นคลาสเพจจะเรียกวิธีการที่เหมาะสม องค์ประกอบลูกควบคุมเพื่อสร้างการแสดง HTML และส่งผ่านไปยัง Response.OutputStream
กำลังขนถ่าย การยกเลิกการโหลดเกิดขึ้นหลังจากสร้างการแสดง HTML สำหรับทั้งหน้าแล้ว

หน้าที่ 10 จาก 11

การสร้างเพจ

การใช้เทมเพลตการออกแบบจะกำหนดข้อกำหนดของตัวเองบนเพจ เนื่องจากเทมเพลตมีคอนโทรล ContentPlaceHolder เพจจึงต้องมีคอนโทรลเนื้อหาที่มีโค้ดมาร์กอัปและคอนโทรลอื่น ๆ ที่จะแสดงผลบนเพจผลลัพธ์ หน้านี้ไม่ควรประกอบด้วยสิ่งใดๆ องค์ประกอบเซิร์ฟเวอร์โค้ดควบคุมหรือมาร์กอัปที่อยู่นอกการควบคุมเนื้อหา

    หน้า 1

  • หน้า 2

  • หน้า 3



เช่นเดียวกับเทมเพลต รหัสตรรกะของหน้าจะถูกสร้างขึ้นด้วยวิธีปกติ ข้อแตกต่างเพียงอย่างเดียวคือเพจไม่มีออบเจ็กต์ของตัวเอง เช่น HeadControl ดังนั้นคุณจึงจำเป็นต้องใช้ลิงก์ไปยังเพจเทมเพลตผ่านคุณสมบัติ Master

โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e) (

ถ้า (!Page.IsPostBack) Master.Page.Header.Title = "หน้าแรก";}!}

ป้องกันเป็นโมฆะ btnShow_Click (ผู้ส่งวัตถุ EventArgs e) ( PlaceHolder.Controls.Add (

ใหม่ LiteralControl(" alert("สวัสดีตอนบ่าย, " + txtName.Text + ""); "));

Master.Page.Header.Title = "สวัสดีตอนบ่าย" + txtName.Text;} !}

ในการผูกเพจเข้ากับเทมเพลต ให้ใช้แอตทริบิวต์ MasterPageFile ของคำสั่ง Page หากคุณต้องการผูกเทมเพลตเดียวกันกับทุกหน้าในไดเร็กทอรี ไม่จำเป็นต้องระบุแอตทริบิวต์ MasterPageFile สำหรับแต่ละเพจ เพียงตั้งค่าเทมเพลตฐานในไฟล์ web.config ก็เพียงพอแล้ว


นอกจากนี้ ASP.NET ยังช่วยให้คุณสามารถตั้งค่าธีมโดยทางโปรแกรมได้ ตามที่กล่าวไว้ข้างต้น การโหลดและการเชื่อมโยงกับเทมเพลตการออกแบบจะเกิดขึ้นในขณะที่กำลังเตรียมเพจสำหรับการเริ่มต้น ดังนั้น หากคุณต้องการเปลี่ยนเทมเพลตการออกแบบเพจ คุณต้องดำเนินการนี้ในตัวจัดการเหตุการณ์ PreInit

โมฆะที่ได้รับการป้องกัน Page_PreInit (ผู้ส่งวัตถุ EventArgs e) ( Page.MasterPageFile = "AnotherMaster.master";)

การประมวลผลเทมเพลต ASP.NET

ในครั้งแรกที่มีการเข้าถึงเพจ ASP.NET จะค้นหาและคอมไพล์แอสเซมบลีสำหรับเทมเพลตทั้งหมดในไดเร็กทอรี การดำเนินการนี้ใช้เวลาพอสมควร ขึ้นอยู่กับจำนวนหน้าเทมเพลตในไดเร็กทอรี แต่จะดำเนินการเพียงครั้งเดียว ดังนั้น หากมีเทมเพลตที่ไม่ได้ใช้ในไดเร็กทอรี สิ่งนี้จะไม่ทำให้ประสิทธิภาพลดลงในขณะที่แอปพลิเคชันกำลังทำงาน ความไม่สะดวกเพียงอย่างเดียวคือเวลาเพิ่มเติม และการคอมไพล์แอสเซมบลีที่ไม่จำเป็นสำหรับเพจที่ไม่ได้ใช้

เมื่อเข้าถึงไฟล์ aspx ของเพจด้วยเทมเพลตการออกแบบที่กำหนด กระบวนการคอมไพล์แทบจะไม่แตกต่างจากกระบวนการคอมไพล์เพจปกติ ยกเว้นว่ามีการสร้างคลาสเทมเพลต MasterPage ซึ่งเป็นลิงก์ที่มีอยู่ในคุณสมบัติ Page.Master

จากนั้นเพจจะทำตามขั้นตอนทั้งหมดที่อธิบายไว้ข้างต้นในบทความนี้ ส่งผลให้มีการสร้างโค้ด HTML ที่ถูกส่งไปยังไคลเอนต์ ใน HTML ที่เบราว์เซอร์ได้รับ ไม่สามารถระบุได้ว่าส่วนใดของโค้ดที่ระบุไว้ในเทมเพลตการออกแบบ และส่วนใดของโค้ดที่ถูกกำหนดบนเพจ เนื่องจากตัวควบคุม ContentPlaceHolder และ Content ไม่มี HTML ใด ๆ การติดต่อสื่อสารและไม่สร้างแท็กเพิ่มเติมนอกเหนือจากเนื้อหา

หน้าแรก

  • หน้า 1
  • หน้า 2

  • หน้า 3\


\

เวลา: 20/03/2548

เนื่องจากเทมเพลตเป็นส่วนย่อยของเพจ จึงอนุญาตให้สร้างเทมเพลตที่ซ้อนกันได้โดยการระบุเส้นทางไปยังเทมเพลตอื่นสำหรับเทมเพลตในคำสั่ง Master โดยใช้แอตทริบิวต์ MasterPageFile ในการดำเนินการนี้ คุณจะต้องกำหนดการควบคุม ContentPlaceHolder ในเทมเพลตหลัก และในเทมเพลต “ลูก” พร้อมด้วยองค์ประกอบ ContentPlaceHolder ให้กำหนดการควบคุมเนื้อหาเพื่อแทนที่เนื้อหาขององค์ประกอบ ContentPlaceHolder ของเทมเพลตฐาน

การใช้เทมเพลตที่แตกต่างกันสำหรับเบราว์เซอร์ที่แตกต่างกัน

นักพัฒนาเว็บทุกคนตระหนักดีว่า เบราว์เซอร์ที่แตกต่างกัน(เช่น Microsoft Internet Explorer, Netscape Navigator, มอซซิลา ไฟร์ฟ็อกซ์ฯลฯ ) ประมวลผลโค้ด HTML แตกต่างกันและที่สำคัญที่สุดคือมีโมเดลที่ตั้งโปรแกรมได้แตกต่างกันเล็กน้อย ซึ่งทำให้การสร้างสคริปต์ไคลเอนต์ซับซ้อน

เมื่อต้องการแก้ไขปัญหานี้ มีสองวิธีหลักที่ใช้ในทั้ง ASP.NET 1.x และ ASP แบบคลาสสิก อย่างแรกคือรหัสไคลเอ็นต์จะถูกส่งไปยังเบราว์เซอร์ไคลเอ็นต์ ซึ่งจะดำเนินการบางอย่างตามประเภทและเวอร์ชันของเบราว์เซอร์ ประการที่สองคือการเปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้ไปยังหน้าเว็บที่ได้รับการปรับให้เหมาะสมสำหรับเบราว์เซอร์เฉพาะโดยเฉพาะ ASP.NET ทำให้การสร้างเพจประเภทนี้เป็นเรื่องง่าย เนื่องจากรันไทม์จะสร้างโค้ด HTML สำหรับการควบคุมเซิร์ฟเวอร์มาตรฐานโดยอิงตามข้อมูลเกี่ยวกับเบราว์เซอร์ของไคลเอ็นต์ เมื่อใช้เทมเพลตการออกแบบ คุณสามารถสร้างเทมเพลตได้หลายรายการต่อเบราว์เซอร์และต่อคำสั่ง หน้าเพจระบุเทมเพลตที่จะใช้

รายการเบราว์เซอร์และคุณสมบัติของเบราว์เซอร์ที่ใช้โดย ASP.NET สามารถพบได้ในไดเร็กทอรี %WINDIT%\Microsoft.NET\Framework\version\CONFIG\Browsers