【问题标题】:ASP.Net MVC How to render script elements?ASP.Net MVC 如何渲染脚本元素?
【发布时间】:2019-01-25 21:33:45
【问题描述】:

谁能解释一下两者的区别:

<script src="/Scripts/custom.js"></script>

和(添加波浪号)

<script src="~/Scripts/custom.js"></script>

@Scripts.Render("~/Scripts/custom.js")

在 ASP.NET MVC 应用程序中(主要在 Razor View 代码中)?

我是aware,通常@Scripts.Render 用于捆绑和缩小脚本。正如您在我的第三个示例中看到的那样,我没有故意使用@Scripts.Render("~/bundles/*"),因为我没有让这个问题看起来像关于捆绑的问题。我想知道渲染(特定页面)脚本的最佳方法是什么。是否还有其他重要原因需要先使用一个?

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:
    <script src="/Scripts/custom.js"></script>
    

    这是相对于您网站的根目录的。它期望 custom.js 文件位于站点根目录的 Scripts 目录中,例如:example.com/Scripts/custom.js

    <script src="~/Scripts/custom.js"></script>
    

    这是虚拟根相对。如果您的站点托管为virtual application in IIS(子应用程序),那么它将确保它在您的虚拟应用程序的根目录中查找 custom.js 文件,而不是在父站点的根目录中。因此,即使您的网站托管在 example.com/yoursite~/Scripts/custom.js 也会寻找 example.com/yoursite/Scripts/custom.js 而不是 example.com/Scripts/custom.js

    @Scripts.Render("~/Scripts/custom.js")
    

    这会在与 &lt;script src="~/Scripts/custom.js"&gt;&lt;/script&gt; 相同的位置查找文件,但只是使用 Razor HTML Helper 作为速记来生成 HTML 标记。

    【讨论】:

    • 所以基本上@Scripts.Render("~/Scripts/custom.js")&lt;script src="~/Scripts/custom.js"&gt;&lt;/script&gt; 完全一样。没有区别,除了 Razor 语法。
    • @broadband 我认为重要的是要注意波浪号仅适用于 Razor - 如果您有原始 HTML 文件并使用 &lt;script src="~/Scripts/custom.js"&gt;&lt;/script&gt; 语法,它将不起作用。
    • 是的,好点。如果有人创建page.html 并包含&lt;script src="~/Scripts/custom.js"&gt;&lt;/script&gt;,它就行不通了。好吧,可以使用 `..` 或完整的 url 路径。
    • 尽管有这个不同,但其他一切都一样吗?我只是在寻找是或否的答案。我还尝试运行几个示例,它似乎证实了相等性。我还没有看源代码。
    • @broadband 应该是相同的 - 如果您想确定,只需检查生成的 HTML。
    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 2013-05-12
    • 2014-01-16
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多