Можно ли вызывать Scripts.Render или Styles.Render из кода, стоящего за ASPX файлом?
Есть ли способ реплицировать поведение помощника @:Scripts/Styles.Render
из кода?
Если я ссылаюсь на пучки с помощью метода BundleTable.Bundles.ResolveBundleUrl
, то связывание и минимизация происходит даже с debug=true
. Я читал другие вопросы, и решение кажется очевидным, используя ранее упомянутый помощник. Но в моем случае я не знаю имя пакета в то время как в aspx, и он генерируется во время выполнения в коде.
Итак, мне нужно добавить ссылки в голове, из кода позади, и я не могу найти способ сделать это.
Есть ли способ? Или я буду вынужден сделать это в файле .aspx?
Ответы
Ответ 1
Оп!
Это то, что я делаю для веб-форм. Этот пример добавляет ресурсы в <head>
, но также работает с любым элементом управления, для которого 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, сделав его защищенной (или общедоступной) переменной в коде (но вы не опубликовали весь свой код, чтобы я был не уверен, что вы до этого точно).
Ответ 2
Вы также можете просто визуализировать script встроенный
<%: Scripts.Render("~/bundles/my_js") %>
Ответ 3
Это также я могу помочь, кто в конце концов опаздывает
Альтернативный вариант без использования Literal Control
ClientScript.RegisterStartupScript(typeof(Page), "MyJS", Scripts.Render("~/bundles/bundledJS").ToHtmlString(), false);