如何在每个局部视图中只包含一次外部JavaScript文件?

如何在每个局部视图中只包含一次外部JavaScript文件?,javascript,asp.net-mvc,include,Javascript,Asp.net Mvc,Include,我有一个部分视图(UserControl),它在我的Asp.NETMVC项目中实现了一个简单的寻呼机。此寻呼机需要访问需要包含一次的.js文件,而不管父页面上存在多少寻呼机控件实例 我曾尝试使用Page.ClientScript.RegisterClientScriptInclude,但没有效果(我认为是因为代码块的计算太晚,无法影响头部控制)。有什么简单的替代方法吗?Page.ClientScript.RegisterClientScriptInclude与传统的ASP.net一起使用 由于您

我有一个部分视图(UserControl),它在我的Asp.NETMVC项目中实现了一个简单的寻呼机。此寻呼机需要访问需要包含一次的.js文件,而不管父页面上存在多少寻呼机控件实例


我曾尝试使用
Page.ClientScript.RegisterClientScriptInclude
,但没有效果(我认为是因为代码块的计算太晚,无法影响头部控制)。有什么简单的替代方法吗?

Page.ClientScript.RegisterClientScriptInclude
与传统的ASP.net一起使用

由于您使用的是asp.net-mvc,所以只需将
js
文件的
script
指令添加到使用此用户控件的页面


因为对所有站点只有一个缩小的css文件是一个很好的实践,所以您可能希望在主css缩小文件中包含此文件

将其添加到母版页

然后你可以保证它只包含一次,而且你不会忘记。使用现代缓存,在每个页面上都包含它确实不会造成性能损失。

当你在部分中发送脚本时,设置一个标志-这是一个保留整个请求的字典。例如:

if (!HttpContext.Current.Items.Contains("SentTheScript"))
{
    HttpContext.Current.Items["SentTheScript"] = true;
    Response.Write(Html.ScriptTag("Script"));
}

这样最多只能呈现一次。

谢谢,但此控件用于多个页面,完成后可能会有多个包含。如果可能的话,我不想记住我创建的每个控件都需要哪些控件。虽然,我想我可以将它们添加到母版页,如果没有其他选择…因为您在站点中使用了部分内容,所以您可以将其用于所有站点,并将其缓存在客户端计算机上。我不确定我是否喜欢这种方法,因为即使控件未加载,它也始终存在。请注意,我实际上没有更好的解决方案。我不会认为这是一个真正的问题,但我很高兴被纠正。听起来这是一个解决任何共享依赖关系的途径。不过,我仍然不确定是否希望在主控中包含所有特定于控件的JS。这应该是可行的,但它不允许对脚本标记的最终位置进行太多控制。例如,不可能将它们分组在头部,或分组在身体底部。