سؤال

يمكنني استخدام الرمز المرفق لتضمين ملف CSS ديناميكيًا:

HtmlHead head = (HtmlHead)Page.Header;
HtmlLink link = new HtmlLink();
link.Attributes.Add("href", Page.ResolveClientUrl("~/App_Themes/Default/StyleSheet.css"));
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
head.Controls.Add(link);

المشكلة هي: أريد أن أفعل ذلك مرة واحدة فقط ، وفقط إذا لم يتم تضمينه في الصفحة.

كيف أتحقق مما إذا تم تضمينه بالفعل؟

تعديل:

الإجابات تخبرني أن تضم في تحميل الصفحة باستخدام !IsPostBack لن يحل مشكلتي ، لأن هذا الرمز سيكون داخل عنصر تحكم مستخدم الويب وقد يكون للصفحة الخاصة بي الكثير من عنصر تحكم المستخدم نفسه.

على سبيل المثال ، أستخدم الكود أدناه للقيام بذلك مع JavaScript:

if (!Page.ClientScript.IsClientScriptIncludeRegistered("jsScript"))
{
    Page.ClientScript.RegisterClientScriptInclude("jsScript", ResolveUrl("~/Utilities/myScript.js"));
}
هل كانت مفيدة؟

المحلول

فعلتها...

الرمز الذي استخدمته كما يلي:

        Boolean cssAlrealyIncluded = false;
        HtmlLink linkAtual;
        foreach (Control ctrl in Page.Header.Controls)
        {
            if (ctrl.GetType() == typeof(HtmlLink))
            {
                linkAtual = (HtmlLink)ctrl;

                if (linkAtual.Attributes["href"].Contains("datePicker.css"))
                {
                    cssAlrealyIncluded = true;
                }
            }
        }

        if (!cssAlrealyIncluded)
        {
            HtmlLink link = new HtmlLink();
            link.Attributes.Add("href", ResolveUrl("~/Utilities/datePickerRsx/datePicker.css"));
            link.Attributes.Add("type", "text/css");
            link.Attributes.Add("rel", "stylesheet");
            Page.Header.Controls.Add(link);
        }

نصائح أخرى

لماذا لا في عنصر تحكم المستخدم الخاص بك ، أضف قيمة إلى httpcontext.current.items التي تشير إلى أن ورقة الأنماط قد تم تضمينها بالفعل؟ سيمنعك ذلك من الحاجة إلى إلقاء نظرة على كل عنصر تحكم في الرأس لكل مثيل للتحكم في المستخدم.

في معظم الحالات ، يجب ألا تهتم إذا تم تضمين CSS أكثر من مرة. إنها عمومًا ليست مشكلة.

تحرير: الطلب مهم فقط إذا كنت بحاجة إلى أن تكون قادرًا على ذلك تجاوز أنماط CSS في أوراق النمط اللاحقة.

في ASP.NET ، يمكنك تضمين CSS في Masterpage (على افتراض أن لديك واحدة) ومن ثم سيتم ضمان تضمينها مرة واحدة فقط. نظرًا لأن Masterpages متاح بشكل برمجي (حتى من عناصر تحكم المستخدم) ، يمكنك حتى كتابة بعض الخصائص (أو الطرق) التي تتيح لك التحكم في CSS Externals لتضمين متى.

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