gpt4 book ai didi

asp.net-mvc - ASP.net MVC 静态资源包和 Scripts.Render()

转载 作者:行者123 更新时间:2023-12-02 01:30:33 25 4
gpt4 key购买 nike

我正在尝试通过更改静态资源(例如 javascript 和 css 文件)的检索方式,在我的 ASP.net MVC 4 项目 (VB.net) 中实现一些静态资源改进。

我一直在关注此链接 ( ASP.NET & MVC 4: Cookieless domain for bundling and static resources ) 来帮助完成此任务,但我遇到了一个问题,即未渲染未 bundle 的 javascript 和 css 文件。

通常在渲染 .js 或 .css 包时,您使用以下内容:

@Scripts.Render("~/bundles/jquery")

这将在开发模式下在 ~/bundles/jquery 包中单独渲染每个脚本标签,并在生产中渲染指向缩小包的单个脚本标签。

根据上面的链接,当脚本 bundle 到单个文件中时,可以使用以下行:

<script src="@Url.StaticContent("~/bundles/jquery")" type="text/javascript"></script>

这对于 bundle 文件来说效果很好,因为 src 属性有效并且 StaticContent 函数能够更改 src URL。但是在开发模式下, bundle 文件不存在,因为没有发生 bundle ,并且所有脚本都通过 @Scripts.Render 单独渲染到浏览器,因此此方法不起作用。

有谁知道是否可以为脚本助手创建一个扩展方法来完成我的需要,或者我是否必须做这样的事情?

@If Misc.IsLocalDev Then
@Scripts.Render("~/bundles/jquery")
Else
@<script src="@Url.StaticContent("~/bundles/jquery")" type="text/javascript"></script>
End If

最佳答案

我设法找到了这个问题的解决方案,因此希望将其放在这里供所有人查看,这将有助于其他遇到与我类似问题的人。

<小时/>

采用与我在原始问题中发布的解决方法相同的想法,我创建了 2 个新的辅助函数来帮助在我的 View 中生成必要的脚本和样式引用...

脚本

<ExtensionAttribute()> _
Public Function RenderScripts(helper As HtmlHelper, async As Boolean, ParamArray Paths() As String) As IHtmlString

If Misc.IsLocalDev Then
Return Optimization.Scripts.Render(Paths)
Else
Dim url As UrlHelper = New UrlHelper(HttpContext.Current.Request.RequestContext, RouteTable.Routes)
Dim html As String = ""
For Each Path In Paths
If async = True Then
html = html & "<script async src=""" & url.StaticContent(Path) & GetAppVersionSuffix() & """ type=""text/javascript""></script>"
Else
html = html & "<script src=""" & url.StaticContent(Path) & GetAppVersionSuffix() & """ type=""text/javascript""></script>"
End If
Next
Return New HtmlString(html)
End If

End Function

所以不要使用:

@Scripts.Render("~/bundles/jquery")

我将调用替换为:

@Html.RenderScripts(False, "~/bundles/jquery")

关于上述方法的一些注意事项...

  • 我在函数调用中添加了一个 async 参数,以便我能够利用现代浏览器 aynsc 脚本。
  • GetAppVersionSuffix() 函数调用返回附加到脚本源末尾的程序集版本,例如 ?v=1.2.3.4。这可以确保浏览器在新版本发布时获得脚本和样式表的新副本。
  • Misc.IsLocalDev 函数是一个特殊函数,当我在本地计算机上进行开发时,我用它来更改 Web 应用程序某些部分的行为方式。在这种情况下,它确保呈现未 bundle 的脚本和样式,而不是缩小/bundle 的脚本和样式,以简化调试。

样式

<ExtensionAttribute()> _
Public Function RenderStyles(helper As HtmlHelper, ParamArray Paths() As String) As IHtmlString

If Misc.IsLocalDev Then
Return Optimization.Styles.Render(Paths)
Else
Dim url As UrlHelper = New UrlHelper(HttpContext.Current.Request.RequestContext, RouteTable.Routes)
Dim html As String = ""
For Each Path In Paths
html = html & "<link href=""" & url.StaticContent(Path) & GetAppVersionSuffix() & """ rel=""Stylesheet"" />"
Next
Return New HtmlString(html)
End If

End Function

所以,不要使用:

@Styles.Render("~/Content/Style")

我将调用替换为:

@Html.RenderStyles("~/Content/Style")

我希望这对某人有用!

关于asp.net-mvc - ASP.net MVC 静态资源包和 Scripts.Render(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19810558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com