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管理解决方案,抑或是已经提供了,我没有发现?

也说 ASP.NET MVC的 Script 管理相关推荐

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

    目录 引言 最后一篇学什么 实验32-整理项目组织结构 关于实验32 实验33--创建单页应用--第一部分-安装 什么是Areas? 关于实验33 实验34--创建单页应用--第二部分-显示Emplo ...

  2. DayPilot——10分钟内用于ASP.NET MVC的AJAX每月事件日历

    目录 1.项目设置(00:00:00-00:03:00) 2. ASP.NET MVC视图(00:03:00-00:04:00) 3.茶歇(00:04:00-00:05:00) 4. ASP.NET ...

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

    系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)- ...

  4. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做权限的管理,这篇比较多 希望新手朋友慢慢消化 项目准备 我们用的工具是:VS 2013 ...

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

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

  6. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做模块管理的 添加.修改.删除 项目准备 我们用的工具是:VS 2013 + SqlSer ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理(附源码)

    前言目录 前言:时间很快,已经快到春节的时间了,这段时间由于生病,博客基本没更新,所以今天写一下我们做的一个项目吧,是对权限的基本操作的操作,代码也就不怎么说了,直接上传源码和图片展示,下面我们直接进 ...

  8. (转)一步一步Asp.Net MVC系列_权限管理设计起始篇

    原文地址:http://www.cnblogs.com/mysweet/archive/2012/07/26/2610793.html 前一段时间,写了一步一步asp.net的一系列博客,最近,也快要 ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据 ...

最新文章

  1. json对象和json字符串转换方法
  2. 前端学习路线_前端学习路线图
  3. 《配置管理最佳实践》——1.2 从哪里开始
  4. keep行走和计步_‎App Store 上的“Keep - 跑步健身计步瑜伽”
  5. swift 4.2 - 根据字符串 push指定控制器
  6. 【VSCode - Vetur 插件报错】Cannot find module ‘XXX‘ or its corresponding type declarations.Vetur(2307)
  7. Android(Lollipop/5.0) Material Design(六) 使用图像
  8. 3.4 多个例子中的向量化
  9. seo该如何防止网站被挂***?!
  10. 最近要使用User Interface Process Application Block for .NET(微软net开发架构)
  11. Java实现二维码的生成
  12. JavaWeb 学习路线
  13. 英文单词和数字断行不折叠
  14. vs项目文件夹进行分类管理
  15. 第十一课 区块链常用共识算法介绍
  16. 婚房布置清单 婚房布置图片大全 婚房布置效果图
  17. 高手必备 | Revit插件到底哪个好?区别是什么?
  18. boss2.0 java_bboss/bboss-core-entity at master · bbossgroups/bboss · GitHub
  19. ev6 ev8 ev4a加密视频破解翻录教程
  20. 超详细 Servlet工作原理解析

热门文章

  1. AndroidStudio使用第三方jar包报错(Error: duplicate files during packaging of APK)
  2. Windows使用免费版Kiwisyslog搭建日志服务器
  3. MongoDB配置文件
  4. 《Core Data应用开发实践指南》一1.3 创建Grocery Dude项目
  5. 移动办公时代的工程行业怎么管理图像?大象云推出3D可视化整体解决方案
  6. 细述 Java垃圾回收机制→Java Garbage Collection Monitoring and Analysis
  7. Codeigniter 利用加密Key(密钥)的对象注入漏洞
  8. 《统一沟通-微软-技巧》-20-Lync 2010如何在我的联系人列表中添加非联盟联系人...
  9. 你的 mixin 兼容 ECMAScript 5 吗?
  10. webpack之 loader