1 捆绑系统可以使得脚本库不绑定到具体版本号,实现自动更新。
bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js")); @Scripts.Render("~/bundles/jquery")
2 HTML编码的用户输入 防止XSS 脚本攻击
public string Browse(string genre) { string message= HttpUtility.HtmlEncode("Genre= "+genre); return message;//利用方法HttpUtility.HtmlEncode来预处理用户输入的值 }
3 MVC 根据默认路由{controller}/{action}/{id} 带有名为id的参数 不用加查询字符串参数也可以传参
//Get:/Store/Details/5 public string Details(int id) { string message="ID= "+id; return message; }
4 视图本身不会被直接访问,浏览器不能直接指向一个试图渲染它。相反,视图总是被控制器渲染,因为控制器为它提供渲染的数据。
5 ViewBag和ViewData ViewBag.Message属性传值 ViewData使用字典方式传值 ViewBag是ViewData的动态封装器 但二者语法不存在技术的差异 只是Message方式更被人们所接受。
二者仍有关键差异。第一点,只有当要访问的关键字是一个有效的c#标识符,ViewBag才起作用。例如如果关键字View[" Bag"]带有空格或者特殊字符ViewBag就无法起作用,编译不会通过。
第二点,动态值不能作为参数传递给扩展方法@Html.TextBox("name",ViewBag.Name) 这里就是动态的,要么使用ViewData 要么string(ViewBag.Name)变成具体类型。
6 View中 强类型视图
Controller public ActoinResult List(){ var albums=new List<Album>(); for (int i=0;i<10;i++) { albums.Add(new Album{title=“Album”+i}); } return View(albums); } View 1.使用完全限定类型 @model IEnumerable<MVCDemo.Models.Album> 2.@using 声明 @using MVCDemo.Models
7