ASP.NET 2.0 เพิ่มการรองรับ MasterPage ในตัว ซึ่งสะดวกมากสำหรับเรา อย่างไรก็ตาม หลังจากใช้งานมาระยะหนึ่ง ฉันพบว่า MasterPage ไม่ได้สมบูรณ์แบบมากนัก MasterPage ที่ซ้อนกันไม่สามารถรองรับอินเทอร์เฟซขณะออกแบบได้ และปัญหาในการเพิ่ม CSS ลงในหน้าเนื้อหาจะกล่าวถึงด้านล่าง
โดยปกติ ก่อนเวอร์ชัน 2.0 ไวยากรณ์สำหรับการเพิ่มการอ้างอิง CSS ไปยังเพจจะเป็นดังนี้:
<link rel="stylesheet" href="css/test.css" />
เดิมทีมันเป็นธรรมเนียมปฏิบัติทั่วไป แต่ในหน้าย่อยของ MasterPage สถานการณ์ที่น่าอับอายมากเกิดขึ้น: เราควรวางโค้ดข้างต้นไว้ที่ไหน?
เนื่องจากในหน้าเนื้อหาเฉพาะของ MasterPage สามารถกำหนดได้เฉพาะเนื้อหาของแต่ละแท็ก <asp:Content /> เท่านั้น ตามหลักปฏิบัติทั่วไป เราไม่สามารถควบคุมเนื้อหา <header/> ของเพจในรูปแบบ aspx ได้ และแท็ก <link/> นี้จะต้องอยู่ภายใน <header/> ฉันได้ลองเพิ่มบรรทัดโค้ดนี้ภายใน <asp:Content /> แล้ว แต่จะแจ้งข้อผิดพลาด
ในเวลาเดียวกัน เราไม่สามารถวาง ContentPlaceHolder ไว้ใน <header/> ของ MasterPage สำหรับโค้ดอ้างอิง CSS ในอนาคตได้
ดังนั้นสิ่งที่ฉันทำคือการกำหนดคลาสตัวช่วยดังต่อไปนี้:
ControlHelper คลาสสาธารณะแบบคงที่
-
โมฆะสาธารณะแบบคงที่ AddStyleSheet (หน้าเพจ, สตริง cssPath)
-
ลิงค์ HtmlLink = HtmlLink ใหม่();
link.Href = cssPath;
link.Attributes["rel"] = "สไตล์ชีต";
link.Attributes["type"] = "ข้อความ/css";
page.Header.Controls.Add(ลิงค์);
-
-
ด้วยวิธีนี้ บนเพจใดเพจหนึ่ง เราสามารถเพิ่มการอ้างอิง CSS ผ่านโค้ดต่อไปนี้:
protected void Page_Load(object sender, EventArgs e)
-
ControlHelper.AddStyleSheet(this.Page, "css/projectPage.css");
-
นอกจากนี้ โค้ดนี้ยังรองรับการใช้งานในหน้าเนื้อหาเฉพาะหรือมาสเตอร์เพจที่ซ้อนกันอีกด้วย
ถึงตรงนี้อาจมีคนถามว่าทำไมต้องแยก CSS โหลดแบบนี้? จำเป็นไหม? จะดีกว่าไหมหากฉันกำหนด CSS สำหรับทุกหน้าเป็นไฟล์ CSS ทั่วไปบางไฟล์
ในความเป็นจริง เพื่อนที่คุ้นเคยกับการผลิต HTML มาตรฐานเว็บต้องรู้ว่าในสถานะที่ค่อนข้างสมบูรณ์ HTML ของหน้าและ CSS ที่ใช้สำหรับการนำเสนอควรแยกออกจากกันโดยสิ้นเชิง สำหรับการออกแบบของเราตามมาตรฐานเว็บ ขั้นแรกเรามักจะสร้างโค้ดตำแหน่งสำหรับแต่ละเฟรม div ในมาสเตอร์เพจ เช่นเดียวกับโค้ดแก้ไขสำหรับส่วนหัวและส่วนท้าย สิ่งเหล่านี้ถูกใช้ในทุกหน้าเนื้อหาและจะถูกวางไว้ใน CSS แบบรวม สำหรับหน้าเนื้อหาเฉพาะอื่นๆ แต่ละหน้าจะมีเค้าโครงเนื้อหาและรูปแบบการแก้ไขที่แตกต่างกัน ดังนั้นฉันจึงใส่ส่วนเฉพาะของแต่ละหน้าใน CSS ของตัวเอง นี่เป็นรูปแบบ CSS ที่ผสานกันทีละชั้นตามระดับการใช้งานของมาสเตอร์เพจ (ซึ่งสามารถซ้อนกันได้) ข้อดีคือ ตระหนักถึงการแบ่งแยกความรับผิดชอบของไฟล์ CSS แต่ละไฟล์ ทำให้ง่ายต่อการเข้าใจและบำรุงรักษา
เนื่องจากฉันไม่ได้สัมผัส ASP.NET 2.0 มาเป็นเวลานานแล้ว ข้างต้นเป็นเพียงประสบการณ์ส่วนตัวเล็กๆ น้อยๆ หากมีวิธีแก้ปัญหาที่สะดวกกว่านี้ โปรดให้คำแนะนำแก่ฉันบ้าง
http://rchen.cnblogs.com/archive/2006/05/23/masterpage_with_css.html