我正在尝试通过改变检索javascript和css文件等静态资源的方式,在我的ASP.net MVC 4项目(VB.net)中实现一些静态资源改进。
我一直在关注此链接(ASP.NET & MVC 4: Cookieless domain for bundling and static resources )以帮助完成此操作,但我遇到了一个问题,即未呈现非捆绑的javascript和css文件。
通常在渲染.js或.css包时,请使用以下内容:
@Scripts.Render("~/bundles/jquery")
这将在开发模式下在〜/ bundles / jquery包中单独呈现每个脚本标记,并在生产时呈现指向缩小包的单个脚本标记。
根据上面的链接,当脚本捆绑到一个文件中时,您可以使用以下行:
<script src="@Url.StaticContent("~/bundles/jquery")" type="text/javascript"></script>
这适用于捆绑文件,因为src属性有效且StaticContent函数能够更改src URL。但是在开发模式下,捆绑文件不存在,因为没有发生捆绑,并且所有脚本都通过 @ Scripts.Render 单独呈现给浏览器,因此此方法不起作用。
有没有人知道是否有可能为Scripts助手创建一个扩展方法来完成我需要的工作,或者我将不得不做这样的事情?
@If Misc.IsLocalDev Then
@Scripts.Render("~/bundles/jquery")
Else
@<script src="@Url.StaticContent("~/bundles/jquery")" type="text/javascript"></script>
End If
答案 0 :(得分:2)
我设法找到了这个问题的解决方案,所以希望通过把它放在这里让所有人看到这将有助于其他人遇到类似的问题。
与我在原始问题中发布的解决方法相同的想法,我创建了2个新的帮助函数,以帮助在我的视图中生成必要的脚本和样式引用...
<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( “〜/捆绑/ jquery的”)
我用:
替换了这些电话@ Html.RenderScripts(False,“〜/ bundles / jquery”)
关于上述方法的几点说明......
<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( “〜/内容/风格”)
我用:
替换了这些电话@ Html.RenderStyles( “〜/内容/风格”)
我希望这对某人有用!