【问题标题】:How can I include an external JavaScript file exactly once per partial view?如何在每个局部视图中只包含一次外部 JavaScript 文件?
【发布时间】:2011-01-26 16:22:18
【问题描述】:

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

我尝试使用Page.ClientScript.RegisterClientScriptInclude,但没有效果(我假设是因为代码块评估得太晚而无法影响头部控制)。有没有简单的替代方案?

【问题讨论】:

    标签: javascript asp.net-mvc include


    【解决方案1】:

    当您在部分中发送脚本时,在HttpContext.Current.Items 中设置一个标志 - 这是一个在整个请求中徘徊的字典。例如:

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

    这样最多只能渲染一次。

    【讨论】:

    • 这应该可行,但它不允许对脚本标签的最终位置进行太多控制。例如,不能将它们分组在头部,或者分组在身体的底部。
    【解决方案2】:

    将其添加到母版页。

    那么你可以保证它只会被包含一次,而且你不会忘记它。使用现代缓存,在每个页面上都包含它真的没有性能损失。

    【讨论】:

    • 不确定我是否喜欢这种方法,因为即使未加载控件,它也始终存在。请注意,我实际上没有更好的解决方案。
    • 我不认为这是一个真正的问题,但我很高兴得到纠正。
    • 听起来这是任何共享依赖项的路径。不过,我仍然不确定是否要在 master 中使用所有特定于控件的 JS。
    【解决方案3】:

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

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

    由于所有站点只有一个缩小的 css 文件是一种很好的做法,因此您可能希望将此文件包含在主 css 缩小文件中。

    【讨论】:

    • 谢谢,但此控件旨在用于多个页面,完成后可能包含多个页面。如果可能的话,我宁愿不必记住我创建的每个控件都需要哪些内容。虽然,我想我可以将它们添加到母版页,如果没有其他选择......
    • 由于您在站点中部分使用,因此可以在所有站点中使用,并缓存在客户端机器上。
    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 2011-11-11
    • 2017-09-10
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多