เพจฟอร์มเว็บ ASP.NET เป็นไฟล์ข้อความประกาศที่มีนามสกุล .aspx นอกจากเนื้อหาคงที่แล้ว คุณยังสามารถทำเครื่องหมายองค์ประกอบโดยใช้ไวยากรณ์ที่แตกต่างกันแปดรูปแบบได้ ส่วนนี้จะทบทวนองค์ประกอบไวยากรณ์เหล่านี้และให้ตัวอย่างวิธีใช้งาน
ไวยากรณ์สำหรับโค้ดการเรนเดอร์: <% %> และ <%= %>
บล็อกการเรนเดอร์โค้ดจะแสดงด้วยองค์ประกอบ <% ... %> ซึ่งช่วยให้คุณควบคุมเนื้อหาที่เรนเดอร์และดำเนินการในระหว่างขั้นตอนการแสดงผลของเพจฟอร์มเว็บ การดำเนินการ ตัวอย่างต่อไปนี้สาธิตวิธีการใช้เพื่อวนซ้ำเนื้อหาของ HTML
<%@ ภาษาของหน้า = "VB" % >
<html>
<ร่างกาย>
<% Dim I เป็นจำนวนเต็ม
สำหรับฉัน = 0 ถึง 7 %>
<font size="<%=I%">">< สวัสดีชาวโลก!
<%ถัดไป %>
</ตัว>
</html>
<% ... %> จะถูกดำเนินการเท่านั้น ในขณะที่นิพจน์ที่มีเครื่องหมายเท่ากับ (<%= ... %>) จะคำนวณผลลัพธ์เมื่อเนื้อหาถูกแสดง ดังนั้น <%="Hello World" %> จะแสดงผลลัพธ์เหมือนกับโค้ด C# <% Response.Write("Hello World"); %>
โปรดทราบว่าเนื่องจากภาษาจำเป็นต้องใช้เครื่องหมายเพื่อยุติหรือแยกคำสั่ง (เช่น อัฒภาค ; ใน C#) จึงเป็นสิ่งสำคัญที่จะต้องวางเครื่องหมายเหล่านี้อย่างถูกต้อง
รหัส C#
<% Response.Write("Hello World"); %> ต้องใช้เครื่องหมายอัฒภาคเพื่อยุติคำสั่ง
<%="Hello World"; %> ข้อผิดพลาด: ทำให้เกิด "Response.Write("Hello World";);"
<%="Hello World" %> ไม่ต้องใช้เครื่องหมายอัฒภาค
ไวยากรณ์สำหรับการประกาศรหัส: <script runat="server">
บล็อกการประกาศรหัสกำหนดตัวแปรสมาชิกและวิธีการที่จะรวบรวมลงในคลาสเพจ บล็อกเหล่านี้สามารถใช้เพื่อสร้างเพจและตรรกะการนำทาง ตัวอย่างต่อไปนี้สาธิตวิธีการกำหนดวิธีการลบในบล็อก <script runat="server"> แล้วเรียกมันในหน้า
<html>
<ภาษาสคริปต์ = "VB" runat=server>
ฟังก์ชั่น ลบ (Num1 เป็นจำนวนเต็ม, Num2 เป็นจำนวนเต็ม) เป็นจำนวนเต็ม
กลับหมายเลข 1-หมายเลข 2
ฟังก์ชันสิ้นสุด
</สคริปต์>
<
เนื้อหา>
-
ตัวเลขสลัวเป็นจำนวนเต็ม = 100
ทำในขณะที่ตัวเลข > 0
Response.Write("ค่า: " & หมายเลข & "<br>")
Number = ลบ (หมายเลข 1)
วนซ้ำ
-
</ตัว>
</html>
โปรดทราบ: ไม่เหมือนกับ ASP - ในฟังก์ชัน ASP จะต้องถูกกำหนดในบล็อก <% %> - ฟังก์ชันทั้งหมดและตัวแปรโกลบอลจะต้องถูกกำหนดโดยใช้แท็ก <script runat=server> การประกาศฟังก์ชันในบล็อก <% %> จะพร้อมท์ข้อความแสดงข้อผิดพลาดในการคอมไพล์ไวยากรณ์
ไวยากรณ์การควบคุมเซิร์ฟเวอร์
การควบคุมเซิร์ฟเวอร์ ASP.NET แบบกำหนดเองช่วยให้นักพัฒนาเพจสามารถสร้างอินเทอร์เฟซผู้ใช้ HTML แบบไดนามิกและตอบสนองต่อคำขอของไคลเอ็นต์ แสดงในไฟล์โดยใช้ไวยากรณ์ตามมาร์กอัปที่ประกาศ แท็กเหล่านี้แตกต่างจากแท็กอื่นๆ ตรงที่มีแอตทริบิวต์ "runat=server" ตัวอย่างต่อไปนี้สาธิตวิธีการใช้การควบคุมเซิร์ฟเวอร์ <asp:label runat="server"> ในเพจ ASP.NET การควบคุมนี้สอดคล้องกับคลาส Label ในเนมสเปซ System.Web.UI.WebControls
ด้วยการเพิ่มแท็กด้วย ID "ข้อความ" คุณสามารถสร้างอินสแตนซ์ป้ายกำกับได้ที่รันไทม์:
<asp:label id="Message" font-size=24 runat="server"/>
เราสามารถใช้ชื่อนี้เพื่อเข้าถึงการควบคุม . รหัสต่อไปนี้ตั้งค่าคุณสมบัติข้อความของตัวควบคุม
Message.Text = "ยินดีต้อนรับสู่ ASP.NET"
<html>
<ภาษาสคริปต์ = "VB" runat=server>
Sub Page_Load (ผู้ส่งเป็นวัตถุ E As EventArgs)
Message.Text = "ยินดีต้อนรับสู่ ASP.NET"
จบหมวดย่อย
</สคริปต์><
<ร่างกาย>
<asp:label id="ข้อความ" font-size=24 runat=server/>
</ตัว>
</html>
ไวยากรณ์การควบคุมเซิร์ฟเวอร์ HTML
การควบคุมเซิร์ฟเวอร์ HTML ช่วยให้นักพัฒนาสามารถใช้งานองค์ประกอบ HTML ในหน้าเว็บโดยทางโปรแกรม แท็กควบคุมเซิร์ฟเวอร์ HTML แตกต่างจากองค์ประกอบ HTML ของไคลเอ็นต์ตรงที่มีแอตทริบิวต์ "runat=server" ตัวอย่างต่อไปนี้สาธิตวิธีการใช้การควบคุมเซิร์ฟเวอร์ HTML <span runat=server> ในเพจ ASP.NET
<html>
<ภาษาสคริปต์ = "VB" runat=server>
Sub Page_Load (ผู้ส่งเป็นวัตถุ E As EventArgs)
Message.InnerHtml = "ยินดีต้อนรับสู่ ASP.NET"
จบหมวดย่อย
</สคริปต์><
<ร่างกาย>
<span id="ข้อความ" style="font-size:24" runat=server/>
</ตัว>
</html>
ไวยากรณ์การผูกข้อมูล: <%# %>
การสนับสนุนในตัวของ ASP.NET สำหรับการผูกข้อมูลช่วยให้นักพัฒนาเพจสามารถผูกคุณสมบัติการควบคุมกับค่าที่เก็บข้อมูลตามลำดับชั้นได้ รหัสในบล็อกรหัส <%# %> จะถูกดำเนินการเมื่อมีการเรียกเมธอด DataBind ของคอนเทนเนอร์ควบคุมพาเรนต์เท่านั้น ตัวอย่างต่อไปนี้สาธิตวิธีการใช้ไวยากรณ์การผูกข้อมูลในตัวควบคุม <asp:datalist runat=server>
ในรายการข้อมูลนี้ แต่ละรายการจะได้รับการกำหนดเทมเพลต เนื้อหาของเทมเพลตรายการถูกระบุโดยใช้นิพจน์การผูกข้อมูล และ Container.DataItem ชี้ไปยังแหล่งข้อมูลที่ใช้โดยรายการข้อมูล MyList
<asp:datalist id="MyList" runat=server>
<เทมเพลตรายการ>
นี่คือค่า: <%# Container.DataItem %><
</เทมเพลตรายการ">
</asp:datalist>
ในกรณีนี้ แหล่งข้อมูลของตัวควบคุม MyList ถูกตั้งค่าโดยทางโปรแกรม และจากนั้นจึงเรียกใช้เมธอด DataBind()
การเรียกเมธอด DataBind ของตัวควบคุมจะทริกเกอร์แผนผังแบบเรียกซ้ำ (เริ่มต้นด้วยการควบคุมไปยังตัวควบคุมด้านล่างในแผนผัง) เหตุการณ์ DataBinding ของแต่ละเซิร์ฟเวอร์ควบคุมในลำดับชั้นจะถูกยกขึ้น และนิพจน์การเชื่อมโยงข้อมูลในค่าควบคุม จะถูกคำนวณตามนั้น ดังนั้น หากมีการเรียกเมธอด DataBind ของเพจ ทุกๆ นิพจน์การผูกข้อมูลในเพจจะถูกเรียก
<html>
<ภาษาสคริปต์ = "VB" runat=server>
Sub Page_Load (ผู้ส่งเป็นวัตถุ E As EventArgs)
รายการ Dim เป็น ArrayList ใหม่
Items.Add("หนึ่ง")
Items.Add("สอง")
Items.Add("สาม")
MyList.DataSource=รายการ
MyList.DataBind()
จบหมวดย่อย
</script><
<ร่างกาย>
<asp:datalist id="MyList" runat=server>
<เทมเพลตรายการ>
นี่คือค่า: <%# Container.DataItem %><
</เทมเพลตรายการ">
</asp:ดาต้าลิสต์><
</ตัว>
</html>
ASP.NET 2.0 ยังมีไวยากรณ์การเชื่อมโยงข้อมูลที่เรียบง่ายใหม่ ซึ่งช่วยให้การควบคุมเชื่อมโยงข้อมูลกับตัวควบคุมแหล่งข้อมูลโดยอัตโนมัติโดยไม่ต้องเรียก DataBind() ในโค้ดของเพจ ไวยากรณ์นี้จะกล่าวถึงในบท "การดำเนินการเข้าถึงข้อมูล"
ไวยากรณ์แท็กอ็อบเจ็กต์: <object runat="server" />
แท็กอ็อบเจ็กต์อนุญาตให้นักพัฒนาเพจใช้ไวยากรณ์ตามแท็กที่ประกาศเพื่อประกาศและสร้างอินสแตนซ์ของตัวแปร ตัวอย่างต่อไปนี้สาธิตวิธีการใช้สัญลักษณ์วัตถุเพื่อสร้างอินสแตนซ์ของคลาส ArrayList
ออบเจ็กต์นี้ถูกสร้างขึ้นโดยอัตโนมัติขณะรันไทม์ และสามารถเข้าถึงได้ผ่าน ID "รายการ"
<html>
<ภาษาสคริปต์ = "VB" runat=server>
Sub Page_Load (ผู้ส่ง ByVal เป็นวัตถุ ByVal E As EventArgs)
ArrayItems.Add("หนึ่ง")
ArrayItems.Add("สอง")
ArrayItems.Add("สาม")
MyList.DataSource = ArrayItems
MyList.DataBind()
จบหมวดย่อย
</สคริปต์>
<
เนื้อหา>
< object id = "ArrayItems" class = "System.Collections.ArrayList" runat=server/ >
<asp:datalist id="MyList" runat=server>
<เทมเพลตรายการ>
นี่คือค่า: <%# Container.DataItem %><
</เทมเพลตรายการ">
</asp:ดาต้าลิสต์><
</ตัว>
</html>
ไวยากรณ์ความคิดเห็นฝั่งเซิร์ฟเวอร์: <%-- ความคิดเห็น --%>
ความคิดเห็นฝั่งเซิร์ฟเวอร์ช่วยให้นักพัฒนาเพจสามารถป้องกันการดำเนินการและการแสดงผลโค้ดเซิร์ฟเวอร์ (รวมถึงการควบคุมเซิร์ฟเวอร์) และเนื้อหาคงที่ ตัวอย่างต่อไปนี้สาธิตวิธีการป้องกันไม่ให้เนื้อหาถูกดำเนินการและส่งไปยังไคลเอนต์ โปรดทราบว่าข้อมูลทั้งหมดระหว่าง <%-- และ --%> จะถูกกรองออกและจะปรากฏให้เห็นในไฟล์เซิร์ฟเวอร์ต้นฉบับเท่านั้น แม้ว่าจะมีคำสั่ง ASP.NET อื่นๆ ก็ตาม
<html>
<ร่างกาย>
เนื้อหาด้านล่างถูกซ่อนจากไคลเอนต์เบราว์เซอร์โดยใช้ความคิดเห็นฝั่งเซิร์ฟเวอร์
(ดูแหล่งที่มา .aspx เพื่อดูว่าเราหมายถึงอะไร :-)
-
<asp:calendar id="MyCal" runat=server/>
<% สำหรับฉัน = 0 ถึง 44 %>
สวัสดีชาวโลก <br>
<%ถัดไป %>
-
</ตัว>
</html>
ไวยากรณ์การรวมไฟล์ฝั่งเซิร์ฟเวอร์: <-- #Include File="Locaton.inc" -->
การรวมไฟล์ฝั่งเซิร์ฟเวอร์ (#Include) ช่วยให้นักพัฒนาสามารถแทรกเนื้อหาของไฟล์เฉพาะที่ใดก็ได้บน ASP เน็ตเพจ. ตัวอย่างต่อไปนี้สาธิตวิธีการแทรกชื่อและส่วนท้ายที่กำหนดเองลงในเพจ
<html>
<ร่างกาย>
<!-- #รวมไฟล์="Header.inc" -->
<br />
<h3> เนื้อหาหน้าหลัก </h3>
<br />
<!-- #รวมไฟล์="Footer.inc" -->
</ตัว>
</html>
ไวยากรณ์นิพจน์: <%$ ... %>คุณลักษณะใหม่ใน 2.0
ASP.NET 2.0 เพิ่มไวยากรณ์นิพจน์ที่ประกาศใหม่สำหรับการทดแทนค่าก่อนการวิเคราะห์เพจ มีประโยชน์มากเมื่อเราต้องการแทนที่ค่าคุณสมบัติการควบคุมเซิร์ฟเวอร์ด้วยค่าสตริงการเชื่อมต่อหรือการตั้งค่าแอปพลิเคชันในไฟล์ Web.config นอกจากนี้ยังสามารถใช้เพื่อแทนที่ค่าในไฟล์ทรัพยากรระหว่างการแปลเป็นภาษาท้องถิ่น
<asp:SqlDataSource ID="SqlDataSource1" ConnectionString='<%$ ConnectionStrings:Pubs %><' runat="server" SelectCommand="sp_GetAuthors" />
<asp:Label ID="Label1" Text='<%$ ทรัพยากร: ExchRate, ConvertLabel %><' runat="server"/>