【发布时间】:2011-12-01 05:58:16
【问题描述】:
我想听听您对在 ASP .NET MVC 中管理脚本的看法。有两个问题我特别好奇:
- 跟踪脚本包括视图的依赖项
- 管理和缩小视图脚本
就像在许多项目中一样,我的视图由几个局部视图和编辑器模板组成。我喜欢将与这些视图相关的脚本保留在同一个代码实体中,例如
SigningKeysForm 部分视图应该有自己的 JQuery/JQueryUI 脚本。
这意味着呈现此部分视图的任何视图都应包含 JQuery/JQueryUI 脚本文件。
另一个问题是当一个视图由几个这样的局部视图组成时,这意味着局部视图中的 javascipt 将位于生成的 html 中的多个位置。
我目前解决这些问题的方法是利用 ASP .Net MVC 中自上而下的视图解析。
为了解决第一个问题,我定义了一个 HtmlHelper 扩展来包含一个脚本,例如
<% Html.RequireScript(Scripts.JQuery); %>
这样,在每个局部视图和视图中,我都会明确指出需要哪些脚本。该方法的实现是在当前的HttpContext上创建一个HashSet,并在其中添加需要的脚本。
在我的母版页中,我有另一个 HtmlHelper 扩展,它检查 HttpContext 并呈现脚本包含标签,例如:
<%=Html.RenderScriptIncludeTags()%>
这样我可以跟踪视图的需求并只渲染所需的脚本包括。
对于视图脚本,我采用了类似的方法。我使用自定义的 Asp .Net 用户控件,而不是呈现其内容,而是将脚本内容存储到 HttpContext 上的缓冲区中,例如:
<mvc:script runat="server">
$(function(){
alert("Hello " + "<%=Model.Name%>");
});
</mvc:script>
再次在主视图中,我有一个 HtmlHelper 扩展,它缩小(如果需要)存储的脚本并呈现它们,例如:
<%=Html.RenderScripts()%>
</body>
我认为这是一种解决方案,但它要求脚本包含和脚本位于母版页的底部。这意味着包含的脚本不在 head 部分中。
我想知道是否有更好的方法来管理脚本要求并使用 ASP .NET MVC 查看页面脚本。
【问题讨论】: