Можно ли вызывать Scripts.Render или Styles.Render из кода, стоящего за ASPX файлом?

Есть ли способ реплицировать поведение помощника @:Scripts/Styles.Render из кода?

Если я ссылаюсь на пучки с помощью метода BundleTable.Bundles.ResolveBundleUrl, то связывание и минимизация происходит даже с debug=true. Я читал другие вопросы, и решение кажется очевидным, используя ранее упомянутый помощник. Но в моем случае я не знаю имя пакета в то время как в aspx, и он генерируется во время выполнения в коде.

Итак, мне нужно добавить ссылки в голове, из кода позади, и я не могу найти способ сделать это.

Есть ли способ? Или я буду вынужден сделать это в файле .aspx?

3 ответа

Оп!

Это то, что я делаю для веб-форм. Этот пример добавляет ресурсы в , но также работает с любым элементом управления, для которого Controls.Add() работает

Для CSS:

System.Web.UI.WebControls.Literal lit = new System.Web.UI.WebControls.Literal();
lit.Text = System.Web.Optimization.Styles.Render("~/bundles/my_css").ToHtmlString();
Header.Controls.Add(lit);

Для JS:

System.Web.UI.WebControls.Literal lit = new System.Web.UI.WebControls.Literal();
lit.Text = System.Web.Optimization.Scripts.Render("~/bundles/my_js").ToHtmlString();
Header.Controls.Add(lit);

Кроме того, поскольку ASPX является подклассом codebehind, вы теоретически можете получить имя пакета из ASPX, сделав его защищенной (или общедоступной) переменной в коде (но вы не опубликовали весь свой код, чтобы я был не уверен, что вы до этого точно).


Вы также можете просто визуализировать script встроенный

<%: Scripts.Render("~/bundles/my_js") %>


Это также я могу помочь, кто в конце концов опаздывает

Альтернативный вариант без использования Literal Control

ClientScript.RegisterStartupScript(typeof(Page), "MyJS", Scripts.Render("~/bundles/bundledJS").ToHtmlString(), false);

licensed under cc by-sa 3.0 with attribution.