أضف رابط ورقة الأنماط إلى كائن الصفحة الذي تم إنشاؤه ديناميكيًا

StackOverflow https://stackoverflow.com/questions/3833008

سؤال

أقوم بإنشاء كائن صفحة وإضافة عنصر تحكم إليه لأغراض الطباعة. يعمل الرمز ، ومع ذلك لا يمكنني العثور على طريقة لإضافة رابط ورقة الأنماط إلى الرأس. في الكود الذي لصق ، أحاول إضافة رابط إلى الرأس ثم إضافة عنصر تحكم الرأس إلى الصفحة ، لكن هذا يسبب خطأً:

الطلب غير متوفر في هذا السياق 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 من عناصر التحكم هذه؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top