Şu anda Düzenleme dosyasının başlığına komut dosyası ve css dosyaları eklemek için aşağıdaki koda benzeyen bir yöntem kullanıyorum. Layout_.cshtml bunları işlemek için dosyaları ... Ve @Html.MyCompany().Styles.Render()
eklemek için Html.MyCompany().Styles.Add("/Dashboard/Content/Dashboard.css");
kullanmaMVC 3 Razor web sitesindeki düzen dosyasına JS ve CSS eklemeye çalışmak kısmi görünümden
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>";
}
.
Sorunum, bunun stil sayfaları ve komut dosyası dosyalarının listesinde kalması anlamına gelen statik bir yöntem olmasıdır.
Bunun yaptıklarının aynısını yapmaya devam etmeliyim, ancak bunu devam ettirmeden.
Sayfadan sayfaya belirli bir sayfada nelerin göründüğünü değiştirdiğinden, her istekte yeniden oluşturulacak listelere ihtiyacım var.
Gereksinim duyulan komut dosyalarını eklemeden önce veya belki de işlendikten sonra listeleri temizlemek mümkün mü?
Güncelleme: bir bölüm kullanmayan nedeni, RenderPartial veya RenderaActions aynı stil veya komut dosyasını önlemektir Düzen dosyasına defadan fazla eklenecek.
Site im binasında temel yerleşim düzenine sahip bir Layout_.cshtml vardır. sırayla Bu öğelerin bir listesi üzerinden ve o öğenin belirli kısmi bir görünüm verir bir RenderAction denir her öğe için döngüler bir Görüntüleme tarafından kullanılır. Bu kısmi görünümlerin bazen stil sayfaları ve komut dosyaları eklemesi gerekir.
Farklı kısmi görünümlerden birçok farklı komut dosyası ve stil sayfası eklemek için gerekli olabileceğinden, bir komut dosyasının tümünün zaten olup olmadığını kontrol etmek için genel bir yer olduğu için bunun yapılabileceğini düşündüğüm tek yöntem stiller ve komut dosyaları için genel bir liste idi. koleksiyona eklendi veya eklenmedi ve hepsini eklendikleri sırayla bir kerede oluşturdu.
Güncelleme 2: asıl soru aynı işlevin tür (global liste) ancak statik Uzatma yöntemi kullanmadan nasıl olduğunu.
Bu statik alan mahkum! Bunu yapma ... bak ... –
Tam olarak emin değilim * neden * tam olarak böyle yapmak gerekir? Bunu bölümler, RenderPartial veya RenderActions ile yapamaz mısınız? –
Evet statikler, bunu öğrendim saf kötülük ama ben vardı pek çok seçenek vardı :) Ben hala iyi bir şekilde korumak için komut dosyaları ve stil sayfaları için küresel bir listeye ihtiyacım var düşünüyorum. –