19

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

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

所以,我需要在头部添加引用,从后面的代码中,我找不到办法做到这一点。

有办法吗?还是我会被迫在 .aspx 文件中执行此操作?

4

3 回答 3

26

是的!

这就是我为 Web 表单所做的。此示例将资源添加到 ,<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 获取包名称(但您没有发布所有代码,所以我不确定是什么你完全符合)。

于 2013-01-28T23:02:29.747 回答
6

你也可以只渲染脚本内联

<%: Scripts.Render("~/bundles/my_js") %>
于 2014-10-03T17:05:27.533 回答
4

这也可能对后来来这里的人有所帮助。

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

  ClientScript.RegisterStartupScript(typeof(Page), "MyJS", Scripts.Render("~/bundles/bundledJS").ToHtmlString(), false);
于 2013-11-12T11:59:28.227 回答