मैं वर्तमान में एक विधि का उपयोग कर रहा हूं जो लेआउट फ़ाइल के शीर्ष पर स्क्रिप्ट और सीएसएस फ़ाइलों को जोड़ने के लिए निम्न कोड जैसा दिखता है।आंशिक विचारों से एमवीसी 3 रेजर वेबसाइट में लेआउट फ़ाइल में जेएस और सीएसएस जोड़ने की कोशिश कर रहे हैं
public static class HtmlHelperExtensions
{
public static MyCompanyHtmlHelpers MyCompany(this HtmlHelper htmlHelper)
{
return MyCompanyHtmlHelpers.GetInstance(htmlHelper);
}
}
public class MyCompanyHtmlHelpers
{
private static MyCompanyHtmlHelpers _instance;
public static MyCompanyHtmlHelpers GetInstance(HtmlHelper htmlHelper)
{
if (_instance == null)
_instance = new MyCompanyHtmlHelpers();
_instance.SetHtmlHelper(htmlHelper);
return _instance;
}
private HtmlHelper _htmlHelper;
public ItemRegistrar Styles { get; private set; }
public ItemRegistrar Scripts { get; private set; }
public MyCompanyHtmlHelpers()
{
Styles = new ItemRegistrar(ItemRegistrarFromatters.StyleFormat);
Scripts = new ItemRegistrar(ItemRegistrarFromatters.ScriptFormat);
}
private void SetHtmlHelper(HtmlHelper htmlHelper)
{
_htmlHelper = htmlHelper;
}
}
public class ItemRegistrar
{
private readonly string _format;
private readonly List<string> _items;
public ItemRegistrar(string format)
{
_format = format;
_items = new List<string>();
}
public ItemRegistrar Add(string url)
{
if (!_items.Contains(url))
_items.Insert(0, url);
return this;
}
public IHtmlString Render()
{
var sb = new StringBuilder();
foreach (var item in _items)
{
var fmt = string.Format(_format, item);
sb.AppendLine(fmt);
}
return new HtmlString(sb.ToString());
}
}
public class ItemRegistrarFromatters
{
public const string StyleFormat = "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />";
public const string ScriptFormat = "<script src=\"{0}\" type=\"text/javascript\"></script>";
}
उन्हें Layout_.cshtml में प्रस्तुत करने के लिए फ़ाइलें ... और @Html.MyCompany().Styles.Render()
जोड़ने के लिए Html.MyCompany().Styles.Add("/Dashboard/Content/Dashboard.css");
का उपयोग करना।
मेरी समस्या यह है कि यह एक स्थिर विधि है जिसका अर्थ है कि यह स्टाइलशीट्स और स्क्रिप्ट फ़ाइलों की सूची बनी हुई है।
मुझे वही काम करने की ज़रूरत है जो यह करता है लेकिन इसे लगातार बनाए रखे बिना।
मुझे प्रत्येक अनुरोध पर रीमेड होने की सूचियों की आवश्यकता है क्योंकि वे पृष्ठ से पृष्ठ पर उस विशिष्ट पृष्ठ पर क्या दिखते हैं।
क्या आवश्यक स्क्रिप्ट जोड़ने से पहले या संभवतः प्रस्तुत किए जाने के बाद प्रत्येक अनुरोध पर सूचियों को साफ़ करना संभव है?
अद्यतन: एक वर्ग का उपयोग नहीं करने के लिए कारण, RenderPartial या RenderaActions ही स्टाइलशीट या स्क्रिप्ट फ़ाइल को रोकने के लिए है लेआउट फाइल करने के लिए एक बार से अधिक जोड़े जाने के लिए।
साइट आईएम बिल्डिंग में बुनियादी लेआउट के साथ लेआउट_.cshtml है। बदले में यह एक दृश्य द्वारा उपयोग किया जाता है जो वस्तुओं की सूची के माध्यम से लूप करता है और प्रत्येक आइटम के लिए एक रेंडरएक्शन कहा जाता है जो उस आइटम के विशिष्ट आंशिक दृश्य को आउटपुट करता है। इन आंशिक विचारों को कभी-कभी स्टाइलशीट और स्क्रिप्ट जोड़ने की आवश्यकता होती है।
विभिन्न आंशिक विचारों से कई अलग-अलग स्क्रिप्ट और स्टाइलशीट जोड़ने की आवश्यकता हो सकती है क्योंकि शैलियों और स्क्रिप्ट के लिए वैश्विक सूची एकमात्र तरीका था जिसे मैंने सोचा था कि ऐसा किया जा सकता है ताकि यह जांचने के लिए एक वैश्विक स्थान हो कि स्क्रिप्ट पहले से ही है या नहीं संग्रह में जोड़ा गया है या नहीं और फिर उन्हें एक साथ क्रम में प्रस्तुत किया गया था।
अद्यतन 2: असली सवाल यह है कि समारोह के (एक वैश्विक सूची) एक ही तरह, लेकिन एक स्थिर विस्तार विधि का उपयोग कर के बिना करना है।
वह स्थैतिक क्षेत्र बर्बाद हो गया है! ऐसा मत करो ... देख रहे हैं ... –
मुझे पूरा यकीन नहीं है * क्यों * बिल्कुल आपको ऐसा करने की ज़रूरत है? क्या आप इसे सेक्शन, रेंडरपार्टियल या रेंडर एक्शन के साथ नहीं कर सकते? –
हां स्थिरताएं शुद्ध बुराई हैं, मैंने इससे सीखा है लेकिन मेरे पास विकल्प बहुत से नहीं थे :) मुझे अभी भी लगता है कि मुझे स्क्रिप्ट और स्टाइलशीट्स के लिए एक अच्छी सूची में इसे बनाए रखने में सक्षम होने के लिए वैश्विक सूची की आवश्यकता है। –