Is it possible to call Scripts.Render or Styles.Render from the code behind of an ASPX file?

Alejandro Rizzo picture Alejandro Rizzo · Jan 22, 2013 · Viewed 11.2k times · Source

Is there a way to replicate the behaviour of the @:Scripts/Styles.Render helper from code behind?

If I reference the bundles by using the BundleTable.Bundles.ResolveBundleUrl method, then bundling and minification occurs even with debug=true. I've read other questions, and the solution seems far obvious, by using the previously mentioned helper. But in my case, I don't know the name of the bundle while in the aspx, and it's generated in runtime in the code behind.

So, I need to add the references in the head, from the code behind, and I can't find a way to do it.

Is there a way? Or will I be forced to do it in the .aspx file?

Answer

nothingisnecessary picture nothingisnecessary · Jan 29, 2013

Yep!

This is what I do for Web Forms. This example adds resources to the <head> but also works with any control for which Controls.Add() works

For 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);

For 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);

Also - since ASPX is a subclass of codebehind, you theoretically COULD get to the bundle name from ASPX by making it a protected (or public) variable in the codebehind (but you didn't post all your code so I'm not sure what you're up to exactly).