Bre*_*ski 8 javascript asp.net-mvc
我已经使用ASP.NET MVC大约六个月了,并且已经查看了那些微软人员创建的Nerd Dinner示例.我注意到他们在启用AJAX到RSVP晚餐时所做的一件事就是将用户控件中的JavaScript引用用于RSVP.
(文件:RSVPStatus.ascx)
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<NerdDinner.Models.Dinner>" %>
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不对,因为我很有可能在其他地方使用这些相同的库,例如登录验证.另外,如果我更改脚本版本,我需要搜索所有对库的引用.
所以我问我的想法是否正确,这些引用实际上应该在主页的中心位置?
请让我知道最佳做法是什么,如果有的话,还有利弊.
我肯定会建议不要把它们放在局部内,这正是你提到的原因.一个视图很可能会引入两个部分,这两个部分都引用了相同的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.我同意Andrew的观点,即直接在母版页中定义的任何常见JS应该连接和缩小.
编辑:我按要求实现.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)
| 归档时间: |
|
| 查看次数: |
6227 次 |
| 最近记录: |