是在基本布局/模板视图中加载所有资源,还是直接在ajax中加载的部分视图中加载资源?
示例:
_布局:
[...]
<head>
<script src="file.js"></script>
<link href="file.css"></link >
</head>
[...]
或者
_布局:
[...]
<head>
</head>
[...]
partialView(稍后在AJAX中加载):
<div>
<script src="file.js"></script>
<link href="file.css"></link >
</div>
最佳答案
您通常要做的是将一些脚本资源推送到viewbag上的列表中,然后让您的模板遍历该列表并为您生成脚本include。
部分:
@{
ViewBag.ScriptIncludes = ViewBag.ScriptIncludes ?? new List<string>();
ViewBag.ScriptIncludes.add("script1.js");
}
在布局中(_layout.cshtml)
@if (ViewBag.ScriptIncludes != null)
{
foreach (string url in ViewBag.ScriptIncludes)
{
<script src="@url" type="text/javascript"></script>
}
}
在正常情况下,这允许您将脚本与部分很好地关联起来,如果您只刷新页面加载中页面上存在的部分,则是一个好主意。
脚本应该预先加载到页面上。不应该通过ajax获取脚本资源并将其注入页面来重新加载脚本。理想情况下,您也不会通过ajax获得html,但有些人认为这是可以接受的。您只想将html注入到页面中,而不想插入更多脚本。如果在部分视图中的项上有事件处理程序,请考虑将事件处理程序附加到容器,而不是单独附加元素。
但是,考虑到您可能正在重新加载任何视图,我认为最好将脚本包含在头部。这将确保以后不会发现任何冲突脚本。您的站点本质上是一个应用程序,最初加载时会给用户带来少量开销,但不需要刷新。