Html 如何在主要使用ajax制作的网站中正确加载资源?

Html 如何在主要使用ajax制作的网站中正确加载资源?,html,model-view-controller,resources,Html,Model View Controller,Resources,在基本布局/模板视图中加载所有资源,还是直接在ajax中加载的局部视图中加载更好 例如: _布局: [...] <head> <script src="file.js"></script> <link href="file.css"></link > </head> [...] [...] <head> </head> [...

在基本布局/模板视图中加载所有资源,还是直接在ajax中加载的局部视图中加载更好

例如:

_布局:

[...]

    <head>
        <script src="file.js"></script>
        <link href="file.css"></link >
    </head>

[...]
[...]

    <head>
    </head>

[...]
[…]
[...]

_布局:

[...]

    <head>
        <script src="file.js"></script>
        <link href="file.css"></link >
    </head>

[...]
[...]

    <head>
    </head>

[...]
[…]
[...]
partialView(稍后在AJAX中加载):


我认为这取决于您的上下文。让我们假设,如果您想拥有一个需要所有页面(视图)的资源,那么最好将它们放在布局中。同样,如果您有一个特定于某个视图的资源,您可以将其加载到视图中。

并确保您正在使用URL帮助程序获取资源的URL。否则,您在部署后会遇到问题。

您通常会将一些脚本资源推送到viewbag上的列表中,然后让模板遍历该列表并为您生成脚本包含

关于部分:

@{
    ViewBag.ScriptIncludes = ViewBag.ScriptIncludes ?? new List<string>();
    ViewBag.ScriptIncludes.add("script1.js");
}
@{
ViewBag.ScriptIncludes=ViewBag.ScriptIncludes??新建列表();
ViewBag.ScriptIncludes.add(“script1.js”);
}
在布局中(_layout.cshtml)

@if(ViewBag.ScriptIncludes!=null)
{
foreach(ViewBag.ScriptIncludes中的字符串url)
{
}
}
在正常情况下,这允许您将脚本与partial相关联,这非常好,如果您只在页面加载时刷新页面上存在的partial,这是一个好主意

应该在页面上预加载脚本。您不应该通过ajax获取脚本资源并将其注入页面来重新加载脚本。理想情况下,您也不会通过ajax获得html,但有些人认为这是可以接受的。您只需要将html注入页面,而不需要更多脚本。如果在部分视图中的项上有事件处理程序,请考虑将事件处理程序附加到容器而不是单独的元素。


然而,考虑到您可能正在重新加载任何视图,我认为最好将脚本包含在头部。这将确保以后不会发现任何冲突脚本。您的站点本质上是一个应用程序,用户在最初加载时需要花费少量开销,但不需要刷新。

问题是,我的所有网站都使用AJAX。几乎任何视图都可以加载。如果您要重新加载所有内容,ajax有什么意义?如果在此之前您在页面上预装了所有资源,那么这可能是有意义的。您必须非常小心JavaScript状态。编写站点代码时,最好将所有脚本都包含在head中(最好是一个js文件),这样您就知道在某个地方没有冲突状态。另外,尽量不要弄坏后退按钮;)我可能应该提到,动态脚本加载还不错,但您需要一种更结构化的机制,而不仅仅是获取包含一些脚本的局部视图。您将更关注获取每个页面的json数据并在客户端上呈现,以及异步加载javascript模块。我并不是说我将重新加载所有内容(至少,不是同时…),而且我不会打断back按钮,因为我使用backbone.js进行路由!如果我加载我的视图“x”,其中有一个脚本“y”,并多次加载它(覆盖旧的一个),它不是坏的吗?是的,它是坏的。如果它与多个视图相关,则需要从模板中加载它。