ใน ASP.NETจะมีเว็บคอนโทรลอยู่สองตัวที่ทำหน้าที่คล้ายๆกันคือแสดงผลส่วนที่เป็นข้อความปกติ Label และ Literal คำถามที่เกิดขึ้นคือ เมื่อไหร่ควรจะใช้ Labelและเมื่อไหร่ควรจะใช้ Literal
ข้อแตกต่างที่เห็นได้ชัดระหว่าง Label และ Literal จะแสดงให้เห็นด้วยตัวอย่างง่ายๆคือ
<asp:Label ID="TestLabel" runat="server">Label</asp:Label> <asp:Literal ID="TestLiteral" runat="server">Literal</asp:Literal>
ซึ่งจะให้ผลลัพธ์เป็น
<span id="TestLabel">Label</span>
Literal
ซึ่งจะเห็นว่าผลลัพธ์ที่ได้นั้นแตกต่างกันตรงที่ Label มี span ครอบแต่ Literal ไม่มี และเมื่อดูจากต้นไม้การสืบทอด จะเห็นว่า Literalนั้นสืบทอดมาจากคลาส System.Web.UI.Control แต่ Label นั้นสืบทอดมาจากคลาสSystem.Web.UI.WebControlทำให้สามารถควบคุมรูปแบบการแสดงผลพวกสไตล์ต่างๆได้ นอกจากนี้ Label ยังมีประโยชน์อีกอย่างที่ไม่ค่อยมีคนรู้กันก็คือ ใช้สำหรับสร้าง tag Label นั่นเอง
<asp:Label id="label" AssociatedControlId="textbox" Text="Username" runat="server" /> <asp:TextBox id="textbox" runat="server" />
จะได้ผลลัพธ์เป็น
<label for="textbox">Username</label> <input type="textbox" name="textbox" value="" />
ในทางกลับกัน Literal ก็มีข้อดีที่ช่วยให้โค้ด HTMLที่ได้นั้นสะอาดและเรียบร้อยกว่าการใช้ Label ซึ่งจากตัวอย่างแรกจะเห็นว่าLabel ให้ผลลัพธ์ที่มีจำนวนตัวอักษรมากกว่า Literal ถึง 28 ตัวอักษร
จากความแตกต่างข้างต้นก็จะได้หลักการใช้งานคร่าวๆคือ
ใช้ Literal เมื่อ
- แสดงผลข้อความทั่วๆไป ซึ่งดีกว่าการฝังข้อความลงไปตรงๆเพราะสามารถนำไปใช้ทำ Localization ได้ทันที
- สร้างสคริปต์
- ใช้ในจุดที่ไม่ต้องการให้มี span ครอบ เช่น <title>, <meta> หรือ <style> เป็นต้น
ใช้ Label เมื่อ
- สร้าง label สำหรับ input ต่างๆ
- สร้างข้อความที่ต้องการเปลี่ยนแปลงสไตล์
ส่วนตัวแล้ว แนะนำให้หลีกเลี่ยงการใช้งาน Label เพราะผลลัพธ์มันเปลือง และน่าเกลียดกว่า
ความจริงแล้วยังมีคอนโทรลอีกหนึ่งตัวที่ทำหน้าที่เหมือน Literal คือLiteralControl ข้อแตกต่างของสองคอนโทรลนี้คือ LiteralControlจะไม่เก็บข้อมูลไว้ใน ViewStateทำให้ค่าของพร็อพเพอร์ตีย์ต่างๆไม่ถูกจำข้าม Request
No comments:
Post a Comment