Pet*_*ter 69 javascript asp.net-mvc jquery partial-views
我想知道在部分视图中包含javascript文件的最佳做法是什么.一旦渲染,这将最终作为我的页面的html中间的js包含标记.从我的角度来看,这不是一个很好的方法.它们属于head标签,因此不应阻止浏览器一次性呈现html.
一个例子: 我在'PictureGallery'局部视图中使用了一个jquery picturegallery插件,因为这个局部视图将在几个页面上使用.这个插件只需要在使用这个视图时加载,我不想知道每个局部视图使用哪些插件......
谢谢你的回答.
Cha*_*ino 28
似乎与此问题非常相似:在用户控件中链接JavaScript库
我会在这里重新提出我的答案.
我肯定会建议不要把它们放在局部内,这正是你提到的原因.一个视图很可能会引入两个部分,这两个部分都引用了相同的js文件.在加载其余的html之前,你还获得了加载js的性能.
我不知道最佳实践,但我选择在母版页中包含任何常见的js文件,然后为某些特定或少量视图的其他js文件定义单独的ContentPlaceHolder.
这是一个示例母版页 - 它非常自我解释.
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<head runat="server">
... BLAH ...
<asp:ContentPlaceHolder ID="AdditionalHead" runat="server" />
... BLAH ...
<%= Html.CSSBlock("/styles/site.css") %>
<%= Html.CSSBlock("/styles/ie6.css", 6) %>
<%= Html.CSSBlock("/styles/ie7.css", 7) %>
<asp:ContentPlaceHolder ID="AdditionalCSS" runat="server" />
</head>
<body>
... BLAH ...
<%= Html.JSBlock("/scripts/jquery-1.3.2.js", "/scripts/jquery-1.3.2.min.js") %>
<%= Html.JSBlock("/scripts/global.js", "/scripts/global.min.js") %>
<asp:ContentPlaceHolder ID="AdditionalJS" runat="server" />
</body>
Run Code Online (Sandbox Code Playgroud)
Html.CSSBlock和Html.JSBlock显然是我自己的扩展,但同样,他们在他们的工作中是自我解释的.
然后说一个SignUp.aspx视图我会
<asp:Content ID="signUpContent" ContentPlaceHolderID="AdditionalJS" runat="server">
<%= Html.JSBlock("/scripts/pages/account.signup.js", "/scripts/pages/account.signup.min.js") %>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
HTHs,查尔斯
PS.以下是关于缩小和连接js文件的后续问题:动态 连接和缩小JS或构建时 - ASP.NET MVC
编辑:根据我的其他答复的要求,我按要求实施了.JSBlock(a,b)
public static MvcHtmlString JSBlock(this HtmlHelper html, string fileName)
{
return html.JSBlock(fileName, string.Empty);
}
public static MvcHtmlString JSBlock(this HtmlHelper html, string fileName, string releaseFileName)
{
if (string.IsNullOrEmpty(fileName))
throw new ArgumentNullException("fileName");
string jsTag = string.Format("<script type=\"text/javascript\" src=\"{0}\"></script>",
html.MEDebugReleaseString(fileName, releaseFileName));
return MvcHtmlString.Create(jsTag);
}
Run Code Online (Sandbox Code Playgroud)
然后魔术发生的地方......
public static MvcHtmlString MEDebugReleaseString(this HtmlHelper html, string debugString, string releaseString)
{
string toReturn = debugString;
#if DEBUG
#else
if (!string.IsNullOrEmpty(releaseString))
toReturn = releaseString;
#endif
return MvcHtmlString.Create(toReturn);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40202 次 |
| 最近记录: |