有没有办法从代码后面复制@:Scripts/Styles.Render
助手的行为?
如果我使用BundleTable.Bundles.ResolveBundleUrl
方法引用捆绑包,则即使使用debug=true
也会发生捆绑和缩小。我已经阅读了其他问题,通过使用前面提到的帮助程序,解决方案似乎非常明显。但在我的情况下,我在aspx中不知道bundle的名称,它是在运行时在后面的代码中生成的。
所以,我需要从后面的代码中添加头文件中的引用,我找不到办法。
有办法吗?或者我将被迫在.aspx文件中执行此操作?
答案 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);