أضف رابط ورقة الأنماط إلى كائن الصفحة الذي تم إنشاؤه ديناميكيًا
-
26-09-2019 - |
سؤال
أقوم بإنشاء كائن صفحة وإضافة عنصر تحكم إليه لأغراض الطباعة. يعمل الرمز ، ومع ذلك لا يمكنني العثور على طريقة لإضافة رابط ورقة الأنماط إلى الرأس. في الكود الذي لصق ، أحاول إضافة رابط إلى الرأس ثم إضافة عنصر تحكم الرأس إلى الصفحة ، لكن هذا يسبب خطأً:
الطلب غير متوفر في هذا السياق system.web.ui.page.get_request () +8700216 system.web.ui.htmlcontrols.htmlhead.renderchildren (htmltextwriter writer) +83
Function getControlHtml() As String
Dim sw As New StringWriter
Dim tw As New HtmlTextWriter(sw)
Dim pg As New Page()
pg.EnableEventValidation = False
Dim cssLink As New HtmlLink
cssLink.Href = "~/css/StyleSheet.css"
cssLink.Attributes.Add("rel", "Stylesheet")
cssLink.Attributes.Add("type", "text/css")
'works without this code
Dim head As New HtmlHead
head.Controls.Add(cssLink)
pg.Controls.Add(head)
Dim frm As New HtmlForm
pg.Controls.Add(frm)
frm.Attributes.Add("runat", "server")
frm.Controls.Add(pnlMACForm)
pg.DesignerInitialize()
pg.RenderControl(tw) ' <--
Return sw.ToString()
End Function
المحلول
لا يمكنك حقًا إنشاء صفحة ديناميكيًا بالطريقة التي تفكر بها. كل ما تفعله هو إنشاء كائن الصفحة ، لكنك لم تفعل ذلك عبر خط أنابيب ASP.NET.
هذا يعني أنه لم يتم تعيين كائن الصفحة على أنه IHttpHandler
للطلب (وبالتالي لم يتم تسليمه HttpApplication
تحتوي على جميع كائنات السياق التي يحتاجها ، مثل Request
و Response
) ، والاتصال بأي من أساليب دورة حياة الصفحة (مثل RenderControl
) سوف تفشل.
لا يوجد لدى ASP.NET WebForms طريقة سهلة لتقديم صفحة إلى سلسلة. إن إنشاء كائن صفحة "غير متصل" وإضافة عناصر تحكم إليه لن يؤدي لك للأسف إلى حد بعيد. إذا كنت بحاجة حقًا إلى تقديم عناصر تحكم خارج دورة حياة الصفحة لسبب ما ، فقد تتمكن من القيام بذلك تحميل ملفات .ascx, ، لكن هذا قد لا يكون ديناميكيًا بدرجة كافية لاحتياجاتك.
هل يمكنني أن أسأل عما تحاول القيام به من خلال الحصول على HTML من عناصر التحكم هذه؟