javascript - आंशिक दृश्य के अंदर वर्गों का उपयोग करने में सक्षम होने के लिए स्वच्छ विकल्प?




asp.net-mvc asp.net-core (2)

आप लेआउट पृष्ठ पर एक आंशिक सिग्नल बना सकते हैं, जिसमें आईओसी स्कॉप्ड या एचटीटीपी कॉन्टैक्ट बैग का उपयोग करके उदाहरण के लिए स्क्रिप्ट शामिल होनी चाहिए। जो लेआउट पृष्ठ द्वारा पढ़ा जाता है।

एकमात्र और मुख्य समस्या यह है कि स्क्रिप्ट केवल इस बैग में होगी जब एक बार आंशिक निष्पादित हो जाता है और तब संभवतः आपका HTML सिर अनुभाग पहले से ही लेआउट व्यू में बंद हो जाता है। तो पृष्ठ के निचले हिस्से में स्क्रिप्ट जोड़ने के लिए ठीक है लेकिन यह सीएसएस के लिए काम नहीं करता।

एक बेहतर तरीका है कि आप अपनी तरह के दृश्य संमिश्र बनाने (या उनका विस्तार करें) और आवश्यक दृश्यों को निर्दिष्ट करने के लिए एक विकल्प बनाते हैं। आईओसी शीर्ष पर इन घटकों और उन्हें जहां आवश्यक प्रदान करता है

बेहतर समाधान

एक बेहतर समाधान होगा, अगर पेजों की आधी हिस्से को यह मुख्य बंडल के अंदर बंडल करने के लिए जावा-स्क्रिप्ट की आवश्यकता होती है। मिनेइफ़र शायद अधिक चर को कम करने में सक्षम होगा, और उपयोगकर्ता को पृष्ठ लोड होने के लिए 1 कम स्क्रिप्ट (http अनुरोध) का अनुरोध करना होगा, इस प्रकार कम ट्रैफ़िक बनाना, तेज पृष्ठ लोड बनाना, बेहतर उपयोगकर्ता अनुभव बनाना

चूंकि हम आंशिक दृश्य के अंदर वर्गों का उपयोग करने में सक्षम नहीं हैं, इसलिए लिपियों को शामिल करने के लिए साफ दृष्टिकोण क्या है जो केवल आंशिक द्वारा आवश्यक है?

मुझे पता है कि मैं आंशिक कॉल करने वाले पृष्ठ में मेरी स्क्रिप्ट अनुभाग को शामिल कर सकता हूं, लेकिन अगर मेरी आंशिक एक जावास्क्रिप्ट घटक को शामिल करता है जिसे मैं अपनी साइट पर फिर से उपयोग करना चाहता हूं, तब प्रत्येक आधार पृष्ठ में कस्टम स्क्रिप्ट शामिल है एक रखरखाव दुःस्वप्न है

यह विचार करते हुए कि आंशिक रूप से जेएस को आंशिक रूप से उपयोग करने में सक्षम नहीं किया जा रहा है, क्या मैं एक पुन: प्रयोज्य दृश्य के लिए आंशिक उपयोग करना चाहता हूं जो जावास्क्रिप्ट घटकों को शामिल करता है?


मैं यह इष्टतम नहीं दिखाएगा, लेकिन यदि आप अपना खुद का व्यू पृष्ठ एक्सटेंशन नहीं बनाना चाहते हैं, तो आप इस तरह से कुछ का निर्माण करने में सक्षम हो सकते हैं:

public static class DeferredScripts
{
    static IList<string> paths = new List<string>();

    public static IList<string> Scripts { get; set; }

    public static void Add(string path)
    {
        if (Scripts == null)
        {
            Scripts = new List<string>();
        }

        if (!paths.Any(s => s.Equals(path, StringComparison.OrdinalIgnoreCase)))
        {
            var script = new TagBuilder("script");
            script.Attributes.Add("src", path);

            Scripts.Add(script.ToString());
            paths.Add(path);
        }
    }
}

जो आप तब आंशिक दृश्य में इस तरह प्रयोग कर सकते हैं:

@{
    DeferredScripts.Add("/scripts/testscript1.js");
}

और इसे अपने लेआउट में (या एक दृश्य पृष्ठ में) का उपयोग करें:

@foreach (var script in DeferredScripts.Scripts)
{
    @Html.Raw(script)
}

मैं एक साथ फेंक दिया गया परीक्षण प्रोजेक्ट में काम करने लगता है: https://github.com/tiesont/DeferredScriptsTestApp

टेलरिक में उनके केंडोयूआई एएसपी.NET एमवीसी मददकर्ताओं के लिए कुछ समान है, हालांकि मैं मानता हूं कि उनके कार्यान्वयन को मैंने जो दिखाया है उससे ज्यादा मजबूत है।





asp.net-core