是否可以从ASPX文件的代码中调用Scripts.Render或Styles.Render?

时间:2013-01-22 15:30:00

标签: c# asp.net bundling-and-minification

有没有办法从代码后面复制@:Scripts/Styles.Render助手的行为?

如果我使用BundleTable.Bundles.ResolveBundleUrl方法引用捆绑包,则即使使用debug=true也会发生捆绑和缩小。我已经阅读了其他问题,通过使用前面提到的帮助程序,解决方案似乎非常明显。但在我的情况下,我在aspx中不知道bundle的名称,它是在运行时在后面的代码中生成的。

所以,我需要从后面的代码中添加头文件中的引用,我找不到办法。

有办法吗?或者我将被迫在.aspx文件中执行此操作?

3 个答案:

答案 0 :(得分:25)

是的!

这就是我为Web Forms所做的。此示例向<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是代码隐藏的子类,理论上你可以通过在代码隐藏中使它成为受保护(或公共)变量来从ASPX获取包名称(但是你没有发布所有代码所以我是不确定你到底在做什么。

答案 1 :(得分:6)

您也可以直接渲染脚本

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

答案 2 :(得分:4)

对于那些以后来这里的人来说,这也可能有所帮助。

不使用文字控制的替代选项:

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