ฉันเชื่อว่าทุกคนเคยใช้ฟังก์ชันมาสเตอร์เพจแบบซ้อนภายใต้ ASP.NET 2.0 ฟังก์ชันนี้มีประสิทธิภาพมากและช่วยให้ผู้ใช้สามารถสร้างหน้าเทมเพลตก่อน จากนั้นจึงนำไปใช้กับหน้าอื่นๆ ได้อย่างง่ายดาย นอกจากนี้ หน้าเทมเพลตสามารถซ้อนกันได้ แต่เราจะพบปัญหากับหน้าเทมเพลตที่ซ้อนกัน นั่นคือเมื่อใช้หน้าเทมเพลตที่ซ้อนกัน จะไม่มีวิธีดำเนินการด้วยภาพในสถานะมุมมองการออกแบบ ดังนั้นจะแก้ไขปัญหานี้ได้อย่างไร ปัญหา? ฉันค้นหาบล็อกของชาวต่างชาติและพบวิธีการที่ชาวต่างชาติให้ไว้ ในขณะนี้ ฉันสามารถเลี่ยงเพื่อแก้ไขปัญหานี้ได้ด้านล่าง:
เราสามารถเขียนคลาสพื้นฐานที่เรียกว่า basepage.cs และวางไว้ในไดเร็กทอรี app_code ในคลาสนี้ ให้เพิ่มคลาสที่เรียกว่า basepage.cs
แอ็ตทริบิวต์ของ runtimeMasterPageFile คือประเภทสตริงที่ระบุไฟล์เทมเพลตที่จะใช้ระหว่างรันไทม์และแทนที่ OnPreInit
วิธีการ รหัสจะเป็นดังนี้:
BasePage คลาสสาธารณะ: System.Web.UI.Page
-
สตริงส่วนตัว runtimeMasterPageFile;
RuntimeMasterPageFile สตริงสาธารณะ
-
รับ
-
กลับ runtimeMasterPageFile;
-
ชุด
-
runtimeMasterPageFile = ค่า;
-
}
การป้องกันแทนที่เป็นโมฆะ OnPreInit (EventArgs e)
-
ถ้า (runtimeMasterPageFile != null)
-
this.MasterPageFile = runtimeMasterPageFile;
-
ฐาน OnPreInit (e);
-
}
ต่อไป เราจะสร้างหน้าเทมเพลตชื่อ mainmaster.master สุ่มเพิ่มข้อมูลส่วนหัวและส่วนท้ายในนั้น ปล่อยให้ contentplaceholder ชื่อ MainContent อยู่ตรงกลาง จากนั้นสร้างหน้าเทมเพลตชื่อ submaster.master ซึ่ง
MasterPageFile="~/MainMaster.master" เมื่อต้องการใช้หน้าเทมเพลต mainmaster ให้วางตารางที่มีหนึ่งแถวและสองคอลัมน์ ดังนี้:
<asp:Content ID = "foo" ContentPlaceHolderId = "MainContent" runat = "เซิร์ฟเวอร์">
<ตาราง>
<tr>
<td width="300">
คอลัมน์ด้านซ้ายใน SubMaster
<br />
<asp:ContentPlaceHolder ID="LeftColumn" runat="เซิร์ฟเวอร์">
</asp:ContentPlaceHolder>
</td>
<td>
คอลัมน์ด้านขวาใน SubMaster
<br />
<asp:ContentPlaceHolder ID="RightColumn" runat="เซิร์ฟเวอร์">
</asp:ContentPlaceHolder>
</td>
</tr>
</ตาราง>
</asp:เนื้อหา>
สุดท้ายนี้ ในหน้า aspx ให้ระบุสิ่งนี้
<%@ ภาษาเพจ = "C #" MasterPageFile = "" RuntimeMasterPageFile = "SubMaster.master" CodeFileBaseClass = "BasePage" AutoEventWireup = "true" CodeFile = "Default.aspx.cs" สืบทอด = "_Default" Title = "เพจที่ไม่มีชื่อ" %>
อย่างที่คุณเห็น ในที่นี้ เราไม่ได้ตั้งค่าคุณสมบัติของ masyterpage แต่ระบุคุณสมบัติของ RuntimeMasterPageFile เป็น
submaster.master นี่คือเทมเพลตที่โหลดขณะรันไทม์ และแอตทริบิวต์ codefilebaseclass ระบุคลาส basepage.cs ที่เราเพิ่งเขียน ด้วยวิธีนี้ เราจะเห็นการดึงในสถานะมุมมองการออกแบบของ ASPX นี้และสามารถลากและวางได้ การออกแบบ
ควรสังเกตว่าตามข้อมูลของ Microsoft กล่าวกันว่าจะไม่เป็นเช่นนั้นจนกว่า VISUAL STUDIO เวอร์ชันถัดไปจะรองรับการสลับสถานะมุมมองการออกแบบแบบเต็มเมื่อเทมเพลตซ้อนกัน
ฉันได้ให้ดาวน์โหลดตัวอย่างของบทความนี้ คลิกที่นี่เพื่อดาวน์โหลด