编辑模板渲染多次,脚本渲染一次

本文关键字:一次 脚本 编辑 | 更新日期: 2023-09-27 18:07:03

我使用ASP。. NET MVC(没有Razor引擎)。我有一个EditorTemplate,它需要一个脚本正常工作。我可以将脚本放在用户控件中,但是我不希望在EditorTemplate在页面中多次出现时多次定义该脚本。

我也不想把脚本放在页面中,因为这将是一个依赖关系,消费者(页面)不容易知道。从长远来看,这是一个bug的配方。

我认为解决方案是把这段代码放在ascx:

<% if (RequestState.IsEditorScriptRendered == null) { %>
    RequestState.IsEditorScriptRendered = true;
    <script>...</script>
<% } %>

不幸的是,似乎没有任何状态具有请求生命周期。我如何存储"IsEditorScriptRendered"信息?有没有更好的方法来达到我想要的结果?

编辑模板渲染多次,脚本渲染一次

Pre-bundles我使用了我自己的答案,如何在MVC3的局部视图中渲染特定于脚本的Section。

使用捆绑包,将所有编辑器模板JS文件包含在一个捆绑包中会更便宜。

您可以将javascript代码放入.js文件中,并从页面中引用它。然后您可以从所有编辑器模板中调用它。

您使用的语言让我相信您正在像Webforms一样处理这个问题。(用户控制,具有请求生存期的状态)。在任何情况下,您能解释为什么您的页面不能很容易地了解依赖关系吗?在ASP。. NET MVC,通常你,作为作者,知道你的依赖,并把它们放在一个Bundle和/或在一个母版页。

我建议只创建一个单独的包或单独的母版页,为少数页面需要它的特定脚本包含。你不局限于只有一个网站范围的主页。

无论如何,脚本都是缓存的,所以它最多只能下载一次。(我并不是说不调优,但是为了避免包含脚本而跳过各种障碍通常是不成熟的优化)。