Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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);