首页 / 网页编程 / ASP.NET / ASP.NET MVC的Script管理
        
            ASP.NET MVC的Script管理2011-08-03 博客园 双鱼座WebForm下的ScriptManager在ASP.NET MVC下自然是不能使用的。于是很多人开始困惑如何管理页面上 可能发生冲突的脚本。CodePlex上还有一个项目专门做这件事情,当然也有人简单地通过HtmlHelper来解 决。如果你看过jQuery UI Extensions for ASP.NET MVC,或者是jQuery Grid for ASP.NET MVC,你还 会找到更多的解决方案。总体上讲,这些解决方案的特点是:1.用一个词典管理已经注册的脚本项,最后再一次性生成所有注册的脚本。所以,你不能漏了在 masterpage的bady的最后运行脚本生成。2.脚本在页面的body区而不是head区。思考半天,感觉复杂了一点。我的解决方案比较简单,每次注册脚本调用一个扩展足够了。代码public static ScriptManagementExtension
{
         private const string ScriptFormat = "	<script src="{0}"  type="text/javascript"></script>";
         private const string CSSFormat = "	<link href="{0}"   rel="stylesheet" type="text/css"></link>";
         private static string IncludeHeader(HtmlHelper helper, string key,  string path, string format)
         {
             var context = helper.ViewContext.HttpContext;
             var exists = context.Items.Contains(key);
             if (!exists)
             {
                 var url = new UrlHelper (helper.ViewContext.RequestContext, helper.RouteCollection);
                 context.Items[key] = true;
                 return string.Format(format, url.Content(path));
             }
             return null;
         }
         public static string IncludeScript(this HtmlHelper helper, string  path)
         {
             return IncludeScript(helper, path.ToLower(), path);
         }
         public static string IncludeScript(this HtmlHelper helper, string  key, string path)
         {
             return IncludeHeader(helper, key, path, ScriptFormat);
         }
         public static string IncludeCSS(this HtmlHelper helper, string  path)
         {
             return IncludeCSS(helper, path.ToLower(), path);
         }
         public static string IncludeCSS(this HtmlHelper helper, string  key, string path)
         {
             return IncludeHeader(helper, key, path, CSSFormat);
         }
}使用的时候在masterPage的head区域加入一个占位标记:<asp:ContentPlaceHolder ID="ScriptContent" runat="server" />然后在每个view中你都可以通过下面的代码来注册脚本了:<%= Html.IncludeCSS("http://www.cnblogs.com/Content/Site.css") %>
<%= Html.IncludeCSS("http://www.cnblogs.com/Content/ui.jqgrid.css")%>
<%= Html.IncludeCSS("jQuery_Theme", Html.GetThemePath()) %>
<%= Html.IncludeScript("http://www.cnblogs.com/Scripts/jquery-1.3.2.min.js")%>
...当然,我也有我的困惑。我的困惑就是,为什么Microsoft没有直接提供Script管理解决方案,抑或是 已经提供了,我没有发现?