ทักษะการประมวลผลแบบจุดเดียวสำหรับชื่อหน้าเว็บ
เมื่อเร็วๆ นี้ เมื่อใช้องค์ประกอบการนำทางเพจที่จัดทำโดย ms ใน .net2.0 ฉันคิดถึงกลไกที่ง่ายและสะดวกในการแก้ปัญหาการไม่ซิงโครไนซ์ชื่อเพจ มันกับทุกคน
ปัญหาปัจจุบัน:
1. โดยปกติจะไม่มีตำแหน่งที่เก็บข้อมูลแบบรวมสำหรับชื่อหน้า aspx ในเว็บไซต์ทั้งหมด สำหรับแต่ละหน้า ชื่อหน้าจะถูกฮาร์ดโค้ดโดยตรงในไฟล์ aspx ของหน้า หรือเขียนแบบไดนามิกผ่าน aspx.cs (ชื่อเพิ่มเติม ยังถูกเพิ่มเข้ามาในการควบคุม 1.1 คุณสมบัติ Page.Title สามารถใช้ได้ใน 2.0) และหากทั้งไซต์มีหน้าเว็บจำนวนมาก โค้ดลอจิกที่ซ้ำกันนี้จะต้องเขียนหลายครั้ง ซึ่งไม่น่าดูอย่างยิ่งและไม่สามารถ ซิงโครไนซ์ในสถานที่อื่นที่ใช้ข้อมูลชื่อเรื่อง
2. แม้ว่าชื่อหน้าทั้งหมดจะถูกใส่ลงในไฟล์ทรัพยากร (หรือ xml) เพื่อรองรับการสนับสนุนหลายภาษา จะมีปัญหาในการโหลดชื่อผ่านโค้ดโปรแกรม Tongyi นั่นคือตำแหน่งที่ใช้ชื่อหน้าใน หน้าอาจไม่เพียงแต่ในพื้นที่ชื่อเรื่องเช่น (การควบคุมการนำทางหน้า) วิธีการให้การควบคุมเหล่านี้ได้รับข้อมูลชื่อเรื่องจากไฟล์ทรัพยากรเหล่านี้ (หรือ xml) ก็เป็นเรื่องที่น่าปวดหัวเช่นกัน
สิ่งที่ต้องบรรลุ:
1. แก้ไขปัญหาทั้งหมดเกี่ยวกับชื่อหน้าเว็บพร้อมกันในเทมเพลตหลักของเว็บไซต์ทั้งหมด ชื่อที่ใช้ในเว็บไซต์ทั้งหมดจะถูกเก็บรักษาไว้ใน Web.sitemap (สามารถรองรับได้หลายภาษา) เพื่อให้สามารถรักษาข้อมูลการนำทางของหน้าได้ พร้อมกัน
2. เพิ่มชื่อเว็บไซต์โดยอัตโนมัติหลังชื่อเว็บไซต์แต่ละชื่อในชื่อของแบบฟอร์มป๊อปอัป เช่น (เข้าสู่ระบบผู้ใช้ | ซอฟต์แวร์ Qisi) แต่เมื่ออ้างอิงชื่อในตัวควบคุมการนำทางหน้า ชื่อเว็บไซต์จะไม่ปรากฏ เช่น เช่น (หน้าแรก>ศูนย์สมาชิก>เข้าสู่ระบบผู้ใช้)
3. เมื่อแอตทริบิวต์ page.Title ถูกอ้างอิงในโปรแกรม aspx.cs จะต้องไม่มีชื่อไซต์ ตัวอย่างเช่น แถบชื่อหน้าจะแสดง (User Login | Qisi Software) แต่ค่า page.Title จะถูกอ้างอิงตามปกติ โปรแกรมของเพจคือ (User Login)
วิธีการดำเนินการเฉพาะมีดังนี้:
เพิ่มรหัสต่อไปนี้ในหน้าต้นแบบของเว็บไซต์:
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
ถ้า (!this.IsPostBack)
-
this.searchDescription.Content = this.SearchDescription;
this.searchKeywords.Content = this.SearchKeywords;
-
ถ้า (SiteMap.CurrentNode != null)
-
this.Page.Title = SiteMap.CurrentNode.Title;
-
อื่น
-
this.Page.Title = "การนำทางหน้านี้ไม่ได้รับการกำหนดค่าใน Web.sitemap";
-
-
ป้องกันแทนที่เป็นโมฆะ Render (ผู้เขียน HtmlTextWriter)
-
this.Page.Title = this.Page.Title + " | " + Keyss.WebFramework.ConfigManager.GetInstance().SiteName;
base.Render(นักเขียน);
}
อธิบาย:
1. สาเหตุที่ไม่มีการใช้การตัดสินหน้าในบล็อก (!this.IsPostBack){} เป็นเพราะสถานะการดูไม่สามารถบันทึกใน page.Title ฉันคิดว่านี่เป็นจุดบกพร่องเล็กๆ ใน .net2.0
2. สาเหตุที่แอตทริบิวต์ของชื่อถูกเขียนใหม่ในวิธีการเรนเดอร์ก็เนื่องมาจากวิธีการเรนเดอร์ไม่ได้บันทึกสถานะการดูตลอดอายุการใช้งานของเพจ และเนื้อหาเพจชื่อที่เขียนจากเพจนั้นใช้ได้เฉพาะในหน้ามาสเตอร์เท่านั้น เนื่องจากมาสเตอร์เพจ มีหน้าที่รับผิดชอบในการเรนเดอร์ชื่อเพจ ในวิธีการเรนเดอร์ของเพจ ชื่อเรื่องได้ถูกเรนเดอร์แล้ว
ที่มา: บล็อกซอฟต์แวร์ Qisi