原文:http://www.cnblogs.com/xdotnet/archive/2012/07/21/aspnet40_webpage20.html

一、可以直接使用“~”,而无需使用Href对象实例

这个是一大变化,给我们ASP.NET MVC开发人员带来了很便捷的代码书写方式,提高不少效率。在MVC3.0中加入我们需要加入一张图片时,需要在IMG标签的SRC属性加上 Url.Content或Href对象方法等来对路径进行解析。在WebPage 2.0中Razor模板引擎能够自动解析基于根目录的路径,即可以直接使用“~”来表示根目录。

 MVC3:

<a href="@Href("~/Default.cshtml")">Home</a>

MVC4:

  1. <a href="~/Default.cshtml">Home</a>

二、CheckBox等可以根据Value自动隐藏checked属性

在以前初始化一个CheckBox是否被选中,都需要额外写一个方法来判断是否在INPUT的CheckBox中加入checked属性。在MVC4.0中这个将被改变,这也是一个很赞的改进,具体可以看如下代码。

MVC3:

<input type="checkbox"

  1.  name="check1"
  2.  value="check1"
  3.  @if(checked1){<text>checked="@checked1"</text>} />

MVC4:

<input type="checkbox"

  1.  name="check1"
  2.  value="check1"
  3.  checked="@checked1" />

只要checked1变量为false或null,将会隐藏checked属性,是不是一个很好的改进!!

三、使用System.Web.Optimization对脚本和样式表的操作

这个也是本章重点向描述的部分,首先我们可以使用VS2012RC来新建一个MVC4.0项目,版本可以为4.0或4.5。在
Global.asax文件代码中,我们发现已经把过滤器,路由器,以及对样式表和脚本捆绑(Bundles)移到了其他页面,就是在根目录下的
App_Start文件夹内。代码只是简简单单的几行,代码如下:

  1.  
  2.  1 using System;
  3.  2 using System.Collections.Generic;
  4.  3 using System.Configuration;
  5.  4 using System.Data.Entity;
  6.  5 using System.Data.Entity.Infrastructure;
  7.  6 using System.Linq;
  8.  7 using System.Web;
  9.  8 using System.Web.Http;
  10.  9 using System.Web.Mvc;
  11.  using System.Web.Optimization;
  12.  using System.Web.Routing;
  13.  
  14.  namespace MVC4
  15.  {
  16.      // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
  17.      // visit http://go.microsoft.com/?LinkId=9394801
  18.  
  19.      public class MvcApplication : System.Web.HttpApplication
  20.      {
  21.          protected void Application_Start()
  22.          {
  23.              AreaRegistration.RegisterAllAreas();
  24.  
  25.              FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  26.              RouteConfig.RegisterRoutes(RouteTable.Routes);
  27.              BundleConfig.RegisterBundles(BundleTable.Bundles);
  28.          }
  29.      }
  30.  }

而在App_Start目录下多了3个文件,他们分别是RilterConfig.cs,RouteConfig.cs以及
BundleConfig.cs文件。在BETA版本中还是直接写在Global.asax文件中,从名称上就可以知道他们各自的功能,今天我们主要了解
BundleConfig.cs文件的内容和功用。

在BundleConfig.cs文件中,包含了一些应用程序中使用的脚本和样式表的文件路径,其中可以使用通配符,具体代码如下所示:

  1.  
  2.  1 using System.Web;
  3.  2 using System.Web.Optimization;
  4.  3 
  5.  4 namespace MVC4
  6.  5 {
  7.  6     public class BundleConfig
  8.  7     {
  9.  8         public static void RegisterBundles(BundleCollection bundles)
  10.  9         {
  11.              bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
  12.                          "~/Scripts/jquery-1.*"));
  13.  
  14.              bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
  15.                          "~/Scripts/jquery-ui*"));
  16.  
  17.              bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
  18.                          "~/Scripts/jquery.unobtrusive*",
  19.                          "~/Scripts/jquery.validate*"));
  20.  
  21.              bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
  22.                          "~/Scripts/modernizr-*"));
  23.  
  24.              bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));
  25.  
  26.              bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
  27.                          "~/Content/themes/base/jquery.ui.core.css",
  28.                          "~/Content/themes/base/jquery.ui.resizable.css",
  29.                          "~/Content/themes/base/jquery.ui.selectable.css",
  30.                          "~/Content/themes/base/jquery.ui.accordion.css",
  31.                          "~/Content/themes/base/jquery.ui.autocomplete.css",
  32.                          "~/Content/themes/base/jquery.ui.button.css",
  33.                          "~/Content/themes/base/jquery.ui.dialog.css",
  34.                          "~/Content/themes/base/jquery.ui.slider.css",
  35.                          "~/Content/themes/base/jquery.ui.tabs.css",
  36.                          "~/Content/themes/base/jquery.ui.datepicker.css",
  37.                          "~/Content/themes/base/jquery.ui.progressbar.css",
  38.                          "~/Content/themes/base/jquery.ui.theme.css"));
  39.          }
  40.      }
  41.  }

这些都是关于Bundle的应用,从代码中就可以看到,Bundle实例对象(Script和Style)中包含一个虚拟目录,这个目录可以在页面
中使用时作为唯一键引入。当然在实现优化时,这个虚拟目录将呈现在前台页面中,这个后面将继续讲述。下面我们来看一下在代码中如何使用他们,在
System.Web.Optimization程序集中包含了Scripts和Styles两个类,分别用于呈现Bundle集合中的脚本和样式表,代
码如下:

  1.          @Styles.Render("~/Content/themes/base/css", "~/Content/css")
  2.          @Scripts.Render("~/bundles/modernizr")

从上面就可以看出,往页面中引入了两个捆绑的样式表和一个脚本,这些引入是包含了所有Include方法内的文件,调试一下看看前台HTML代码就知道了。而他们中的另一个方法Url则是对外部文件的引入,例如CDN中的文件,如:Google等等API文件。

四:对样式表和脚本的优化

这项其实也是包含在三中的,我独立出来,最主要感觉是我觉得他是个不错的家伙。代码简单,但是非常的适用,不知道大家有没有使用过
AjaxMinify这个东东,可以把脚本编译,压缩成最小的内容。不过都是要使用命令的,然而在MVC4.0中
System.Web.Optimization已经包含了这个东东,他们就是JsMinify和CssMinify,不要小看这两个类,虽然公开的方法
就两个。

按照上述方法是用Scripts和Styles将脚本和样式表引入页面时,无需修改任何代码就可以将脚本和样式表编译压缩输入到客户端,这样不仅可
以有效的增加JSHack的难度以及降低文件的大小。为了达到这个目的,我们只需要将BundleTable中的一个属性设置为true即可,代码如下:

  1.  
  2.  1 using System;
  3.  2 using System.Collections.Generic;
  4.  3 using System.Configuration;
  5.  4 using System.Data.Entity;
  6.  5 using System.Data.Entity.Infrastructure;
  7.  6 using System.Linq;
  8.  7 using System.Web;
  9.  8 using System.Web.Http;
  10.  9 using System.Web.Mvc;
  11.  using System.Web.Optimization;
  12.  using System.Web.Routing;
  13.  
  14.  namespace MVC4
  15.  {
  16.      // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
  17.      // visit http://go.microsoft.com/?LinkId=9394801
  18.  
  19.      public class MvcApplication : System.Web.HttpApplication
  20.      {
  21.          protected void Application_Start()
  22.          {
  23.              AreaRegistration.RegisterAllAreas();
  24.              
  25.              FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  26.              RouteConfig.RegisterRoutes(RouteTable.Routes);
  27. 26             BundleTable.EnableOptimizations = true;
  28.              BundleConfig.RegisterBundles(BundleTable.Bundles);
  29.          }
  30.      }
  31.  }

是不是很神奇啊,上面红色字体的就是我们要加入的一行代码。关于ASP.NET 4.5 MVC
4.0还有很多值得我们去挖掘,由于我不是一个专业的学术研究者,写的文章不够有条理,思路都是想到那些到哪,没有时间来规范这个从易到难或什么的来书
写,给各位带来不好的浏览效果表示歉意。

第四章 在MVC4.0中对脚本以及样式表的引用变化的更多相关文章

  1. [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.         jqGrid和AJAX 5.         GridSettings 6.  ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  3. Spring.Net在Mvc4.0中应用的说明

    案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll 2.修改Global文件 (Spring ...

  4. MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题

    ///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...

  5. MiniProfiler.3.0.10 用于MVC4.0中不能显示SQL语句

    MiniProfiler.3.0.10 用于MVC4.0中可以显示执行时间,但是不能显示SQL语句,怎么解决?

  6. MVC4.0中ViewBag、ViewData、TempData和ViewModel几种传值方式的区别

    MVC框架实现了数据的分离,使页面看起来更加的简洁,MVC4.0中Controller和View的数据传输有上边这几种方式,今天我们来探讨下这几种方式的却别. 一:ViewBag和ViewData V ...

  7. “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 4.2. 构建一个搜索查询 搜索数据是几乎所有应用的一个基本功能.它一般是动态的,因 ...

随机推荐

  1. Mac下利用(xcode)安装git

    Mac下利用(xcode)安装git 一.AppStore 最安全途径:搜索下载Xcode,(需要AppleID). 其他:直接百度Xcode下载. 二.Xcode 打开Xcode-->Pref ...

  2. Android logcat

    logcat是Android中一个命令行工具,可以用于得到程序的log信息. 基本命令 logcat使用方法如下所示: [adb] logcat [<option>] ... [<f ...

  3. .NET下单文件的上传处理

    ASP.NET的单文件上传使用控件 <asp:FileUpload ID="upmess" runat="server" Width="248p ...

  4. iOS开发之网络数据解析--中文输出

    对于服务器返回的数据,解析之后直接打印,如果数据中原本有中文,可能会出现中文乱码的结果: 为了避免这个问题,可以通过类别来重写系统和打印相关的方法. 步骤: 1.新建文件名:Foundation+Lo ...

  5. Xcode 文件删除拷贝 出现的问题

    当删除一个组的时候,不管是下面的两个选择,是彻底删除还是不彻底: 然后又要往工程里拷贝进去  同名  文件组,最好是选择Creat groups (因为创建groups就不会有import的时候,还需 ...

  6. Xcode的内存清理

    1.删除Xcode中多余的证书provisioning profile 手动删除: 打开finder,然后在最上面的前往中前往下方的路径,就可以看到你xcode运行到现在使用过的证书provision ...

  7. 关于git

    一.Git基础教程  01.[入门练习]廖雪峰 git教程网:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8 ...

  8. Python yield 使用浅析(iterable generator )

    http://blog.csdn.net/preterhuman_peak/article/details/40615201 如何生成斐波那契數列 斐波那契(Fibonacci)數列是一个非常简单的递 ...

  9. 三种另外的循环 while{} 和do{}while{}还有switch case

    while的写法 var i=0; while(i<5){ document.write("12378<br />");  i++;} while(true)-- ...

  10. git提交报错

    Error occurred computing Git commit diffsMissing unknown 0000000000000000000000000000000000000000 co ...