ASP.NET MVC的Script管理

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 = "\t<script src=\"{0}\"  type=\"text/javascript\"></script>";
         private const string CSSFormat = "\t<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管理解决方案,抑或是 已经提供了,我没有发现?

时间: 2024-08-11 06:04:51

ASP.NET MVC的Script管理的相关文章

七天学会ASP.NET MVC(七)——创建单页应用

系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)--ASP.Net MVC 数据处理 七天学会ASP.NET MVC (四)--用户授权认证问题 七天学会ASP.NET MVC (五)--Layout页面使用和用户角色管理 七天学会ASP.NET MVC (六)--线程问题.异常处理.自定义URL 七天学会ASP.NET MVC(七)--创建单页应

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改 ASP.NET MVC+EF框架+EasyUI实现权限管系列  (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装   (5):前台Jquery easyUI实现    (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一    (9):TT摸版的学习   (1

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    (5):前台Jquery easyUI实现    (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一     (9):TT摸版的学习    (1

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装 前言:今天经理买了一个诺基亚的Windows Phone 8系统,特感兴趣,所以在哪里看了很长时间,这篇文章就写的有点迟, 从这个Demo开始到现在我已经写了4篇博客了,终于可以看到页面的东

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装          (5):前台Jquery easyUI实现   (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一          (9):TT摸版

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    (5):前台Jquery easyUI实现    (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一     (9):TT摸版的学习 

七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)--ASP.Net MVC 数据处理 七天学会ASP.NET MVC (四)--用户授权认证问题 七天学会ASP.NET MVC (五)--Layout页面使用和用户角色管理  七天学会ASP.NET MVC (六)--线程问题.异常处理.自定义URL 七天学会ASP.NET MVC(七)--创建单页

ASP.NET MVC 权限管理(一)

用了好长一段时间的ASP.NET MVC,感觉MVC真的是很好用,最近一年左右做了两个中小型项目,觉得还是很多地方不是很熟悉的,所以现在打算做一个比较通用一点的管理系统,后台主要包括的模块有:会员管理.权限管理.系统管理.内容管理,还有前台的用户中心系统. PS:博主现在换工作了,是做电商的美工,感觉开发时间久太累了,换个环境休养生息~~~~所以更新肯定不会很快,各位见谅吧~~ 废话不多说,这个系统现在还处于构思阶段,我打算是一边开发一边写博客,写得不好的地方各位多多包涵:系统使用VS2012

用ASP.NET MVC自己管理自己的View:ASP.NET MVC File Management

频繁的与美工交接,频繁的通过FTP.远程连接上传文件,哪怕是改一个字节都要传一次服务器.日常 开发中有太多的很烦很烦的界面修改,于是我之前做了ASP.NET MVC View Management,用于管理服务器 上ASP.NET MVC中View文件的小改动,不过后来又感觉到有些配置文件有时也要修改,于是将其扩展至上 一层,使之能管理更多的文件. 在这个项目中,我没有考虑过多的安全问题与文件是否可编辑的问题,因为我是假定系统管理員在了 解系统的情况下,去使用的,而且系统管理員也可以很好地将这个