EditorTemplate呈现多次,脚本呈现一次

时间:2014-06-06 21:22:28

标签: c# asp.net asp.net-mvc-5 mvc-editor-templates .net-4.5

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

我也不想将脚本放在页面中,因为这将是消费者(页面)无法轻易了解的依赖关系。从长远来看,这是一个错误的秘诀。

我认为解决方案是将此代码放在ascx中:

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

不幸的是,似乎没有任何具有请求生命周期的状态。我怎么能存储“IsEditorScriptRendered”信息?有没有更好的方法来实现我想要的结果?

3 个答案:

答案 0 :(得分:1)

预捆绑我使用了特定于脚本的my own answer to How to render a Section in a Partial View in MVC3

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您使用的语言让我相信您正在接近Webforms。 (用户控制,具有请求生存期的状态)。在任何情况下,你能解释为什么你的页面不能轻易知道依赖关系吗?在ASP.NET MVC中,作为作者,您通常会了解您的依赖关系并将它们放在Bundle和/或母版页中。

我建议只为需要包含特定脚本的几个页面创建单独的包或单独的母版页。您并不仅限于一个站点范围的母版页。

无论如何,脚本都是缓存的,因此最多只能下载一次。 (我不是说不要调整,但跳过箍以避免包含脚本通常是不成熟的优化)。