Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.net MVC静态资源包和脚本.Render()_Asp.net Mvc_Bundle_Extension Methods - Fatal编程技术网

Asp.net mvc ASP.net MVC静态资源包和脚本.Render()

Asp.net mvc ASP.net MVC静态资源包和脚本.Render(),asp.net-mvc,bundle,extension-methods,Asp.net Mvc,Bundle,Extension Methods,我试图通过改变静态资源(如javascript和css文件)的检索方式,在我的ASP.NETMVC4项目(VB.net)中实现一些静态资源改进 我一直在遵循这个链接()来帮助实现这一点,但我遇到了一个问题,即未绑定的javascript和css文件无法呈现 通常,在呈现.js或.css捆绑包时,您会使用以下内容: @Scripts.Render("~/bundles/jquery") 然后,在开发模式下,这将在~/bundles/jquery捆绑包中分别呈现每个脚本标记,并在生产模式下呈现一个

我试图通过改变静态资源(如javascript和css文件)的检索方式,在我的ASP.NETMVC4项目(VB.net)中实现一些静态资源改进

我一直在遵循这个链接()来帮助实现这一点,但我遇到了一个问题,即未绑定的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 helper创建一个扩展方法来完成我需要的任务,或者我必须这样做吗

@If Misc.IsLocalDev Then
    @Scripts.Render("~/bundles/jquery")
Else
    @<script src="@Url.StaticContent("~/bundles/jquery")" type="text/javascript"></script>
End If
@如果Misc.IsLocalDev那么
@Scripts.Render(“~/bundles/jquery”)
其他的
@
如果结束

我设法找到了这个问题的解决方案,所以希望通过将它放在这里让所有人看到,这将帮助其他人解决我遇到的类似问题


与我在原始问题中发布的解决方法相同,我创建了两个新的帮助函数,以帮助在视图中生成必要的脚本和样式引用

剧本
_
公共函数RenderScripts(helper作为HtmlHelper,async作为Boolean,paramary path()作为字符串)作为IHtmlString
如果是Misc.IsLocalDev,则
返回Optimization.Scripts.Render(路径)
其他的
作为UrlHelper的Dim url=新的UrlHelper(HttpContext.Current.Request.RequestContext,RouteTable.Routes)
将html设置为字符串=“”
对于路径中的每个路径
如果async=True,则
html=html&“
其他的
html=html&“
如果结束
下一个
返回新的HtmlString(html)
如果结束
端函数
因此,与其使用:

@Scripts.Render(“~/bundles/jquery”)

我将这些电话替换为:

@RenderScripts(False,“~/bundles/jquery”)

关于上述方法的几点注记

  • 我在函数调用中添加了一个async参数,以允许我使用现代浏览器aynsc脚本
  • GetAppVersionSuffix()函数调用返回附加到脚本源末尾的程序集版本,例如,v=1.2.3.4。这可确保浏览器在发布新版本时获得脚本和样式表的新副本
  • Misc.IsLocalDev函数是一个特殊的函数,我在本地机器上开发时,用来改变web应用程序某些部分的行为方式。在这种情况下,它确保呈现未绑定的脚本和样式,而不是缩小/绑定的脚本和样式,以简化调试
风格
_
公共函数RenderStyles(helper作为HtmlHelper,paramary path()作为字符串)作为IHtmlString
如果是Misc.IsLocalDev,则
返回优化.Styles.Render(路径)
其他的
作为UrlHelper的Dim url=新的UrlHelper(HttpContext.Current.Request.RequestContext,RouteTable.Routes)
将html设置为字符串=“”
对于路径中的每个路径
html=html&“
下一个
返回新的HtmlString(html)
如果结束
端函数
因此,再次强调,不要使用:

@Style.Render(“~/Content/Style”)

我将这些电话替换为:

@Html.RenderStyles(“~/Content/Style”)


我希望这对某人有用

出于兴趣,您为什么要这样做?是否允许您向脚本调用添加其他属性?我正在尝试这样做,以便cookie数据不会与获取静态资源的请求一起发送,因为它们不需要cookie。这也意味着可以建立更多的并发浏览器连接来加速页面加载。为什么要进行向下投票???至少解释一下为什么它被否决了!问题很清楚?!?!落选的不是我,所以我说不出原因。午餐时间完全错过了静态域引用,实际上这是我以前使用过的一种技术(减去捆绑)。对于您来说,在调试模式下可以使用未统一和单独的文件是否很重要?另外,为了让我能够获得正确语言的任何代码,您是将ASP.NET MVC与VisualBasic.NET结合使用还是使用C#?上面的样本(不同寻常地)表明了前者。
<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
<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