ฉันจะรับธีม ASP.NET ปัจจุบันจาก HttpContext.Current ได้อย่างไร

ฉันใช้ AJAX เพื่อโหลดการควบคุมผู้ใช้จากฝั่งเซิร์ฟเวอร์ภายใน HTTP Handler ในการดำเนินการนี้ ฉันกำลังสร้างออบเจ็กต์หน้าใหม่และดำเนินการฝั่งเซิร์ฟเวอร์ควบคุมผู้ใช้เพื่อสร้าง HTML แบบดิบ เช่น:

   Dim page As New Page()
   Dim frm As New HtmlForm
   Dim commentTag As String = "CaptureText"
   Dim viewControl As UserControl = CType(page.LoadControl(VirtualPathUtility.ToAbsolute(String.Format("~/Help/{0}.ascx",Topic))), UserControl)
   page.Controls.Add(frm)
   frm.Controls.Add(New LiteralControl(String.Format("<!-- {0} -->", commentTag)))
   frm.Controls.Add(viewControl)
   frm.Controls.Add(New LiteralControl(String.Format("<!-- /{0} -->", commentTag)))

   Dim writer As New StringWriter()
   context.Server.Execute(page, writer, False)
   context.Response.ContentType = "text/html"
   context.Response.Write(GetContents(writer.ToString, commentTag))

GetContents() เป็นเพียงฟังก์ชันที่ส่งคืนทุกอย่างระหว่างความคิดเห็น HTML แบบฮาร์ดโค้ด 2 รายการ ซึ่งเป็นเพียง HTML ของ UserControl ของฉันเท่านั้น

ปัญหาที่ฉันมีคือการควบคุมเซิร์ฟเวอร์บางส่วนต้องการการสนับสนุนธีม ASP.NET ฉันพบวิธีดำเนินการโดยเพิ่มบรรทัดต่อไปนี้หลังการประกาศเพจ:

   page.Theme = "Theme3"
   page.Controls.Add(New System.Web.UI.HtmlControls.HtmlHead())

สิ่งนี้ใช้งานได้อย่างมีเสน่ห์เมื่อฮาร์ดโค้ดด้วยชื่อธีม อย่างไรก็ตาม ฉันต้องการรับชื่อธีมจากบริบทปัจจุบัน ตัวอย่างทั้งหมดที่ฉันเห็นทางออนไลน์กำหนดให้คุณต้องมีวัตถุหน้าเพื่อที่จะรับชื่อของธีม แต่ฉันกำลังจะเริ่มต้นด้วยหน้าใหม่ที่ไม่มีธีม

ดังนั้นคำถามของฉันคือมีวิธีโหลดชื่อธีมจากที่ไหนสักแห่งใน HttpContext หรือเป็นวิธีเดียวที่จะโหลดสิ่งนี้บนฝั่งเซิร์ฟเวอร์โดยส่งชื่อธีมจากไคลเอนต์ผ่าน AJAX


person NightOwl888    schedule 28.01.2012    source แหล่งที่มา
comment
แล้วการจัดเก็บธีมในสถานะเซสชันล่ะ   -  person Mikhail    schedule 29.01.2012


คำตอบ (1)


(System.Web.HttpContext.Current.Handler as System.Web.UI.Page).Theme;

หรือสมมติว่าคุณกำลังใช้ธีมเริ่มต้นโดยระบุในส่วนเพจ

PagesSection pages = (PagesSection)WebConfigurationManager.GetSection("system.web/pages");

//use the them  via  pages.Theme
person chandmk    schedule 28.01.2012
comment
ฉันเคยคิดเรื่องนี้ อย่างไรก็ตาม เนื่องจากฉันกำลังดำเนินการคำสั่งจากภายในตัวจัดการ HTTP ทั่วไป จึงไม่สามารถส่งเป็นหน้าประเภทได้ มีความคิดอื่นอีกไหม? - person NightOwl888; 28.01.2012
comment
แนวคิดที่สองของคุณก็เป็นโค้ดที่มีประโยชน์เช่นกัน อย่างไรก็ตาม หมายความว่าตัวจัดการนี้จะต้องเปลี่ยนหากฉันเปลี่ยนวิธีการใช้ธีมในอนาคต ขณะนี้มีตรรกะแบบมีเงื่อนไขบางอย่างที่นำไปใช้ในหน้าฐานตามตัวแปรที่เก็บไว้ในโปรไฟล์ผู้ใช้ ฉันคิดว่าฉันจะส่งต่อจากลูกค้าในตอนนี้ ด้วยวิธีนี้การอัปเดตในอนาคตจะไม่ทำให้ระบบเสียหาย - person NightOwl888; 29.01.2012
comment
โค้ดจัดการอย่างดีไม่จำเป็นต้องเปลี่ยน เนื่องจากโค้ดนี้รับธีมจาก web.config และถ้าคุณต้องการให้ธีมขึ้นอยู่กับผู้ใช้ คุณสามารถใช้เซสชันใดเซสชันหนึ่งหรือดึงข้อมูลจากโปรไฟล์ของผู้ใช้ก็ได้ - person chandmk; 29.01.2012