複製大佬的,侵權請聯繫我主動刪除 1.js/css合併 在之前的crud例子中,我們引入js/css腳本的方式和平常的web開發一樣 [javascript] view plain copy <script src="~/Scripts/jquery-1.8.2.min.js"></script> ...
複製大佬的,侵權請聯繫我主動刪除
1.js/css合併
在之前的crud例子中,我們引入js/css腳本的方式和平常的web開發一樣
[javascript] view plain copy- <script src="~/Scripts/jquery-1.8.2.min.js"></script>
- <script src="~/Scripts/jquery.validate.min.js"></script>
- <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
但是mvc框架提供了一個強大的js/css腳本合併功能
我們找到App_Start文件夾下的BundleConfig.cs類
雙擊打開
雖然代碼看不懂,但是我們可以從中看到一大堆引入js和css腳本的路徑
下麵我們模仿其格式,嘗試自己添加
[csharp] view plain copy- bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
- "~/Scripts/jquery.unobtrusive*",
- "~/Scripts/jquery.validate*"));
- //自己添加的ScriptBundle--MyScript
- bundles.Add(new ScriptBundle("~/bundles/MyScript")
- .Include("~/Scripts/jquery-1.8.2.min.js",
- "~/Scripts/jquery.validate.min.js",
- "~/Scripts/jquery.validate.unobtrusive.min.js"));
- //開啟合併壓縮功能
- BundleTable.EnableOptimizations = true;
ok,搞定~
這就完成了j腳本的合併引用
那麼之前的視圖頁就不需要之前的方式了
現在我們將原來的三個js腳本引用刪掉
換上新代碼
[csharp] view plain copy
- @Scripts.Render("~/bundles/MyScript")//此處的路徑填寫new ScriptBundle("~/bundles/MyScript")中的路徑名,這是可以隨意命名的,譬如也可以變這樣:new ScriptBundle("~myjs")
我們通過開發人員工具來看看兩次的對比
未使用js合併之前
發送了三個js請求到伺服器
使用js合併之後
三個請求合為一個,當程式規模比較大的時候頁面中的js/css引用非常多,如果按照正常的方式來引用腳本會向伺服器發送大量的請求
js合併功能幫我們解決了這個問題,而且它不僅僅是將三個js文件合併在一起,還進行了壓縮優化,可以通過伺服器的相應正文看到
使用css合併壓縮也是一樣的,根據BundleConfig.cs中的格式添加一個StyleBundle在引用就搞定~
神技能,get it!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.HtmlHelper,UrlHelper
在mvc框架中為程式員提供了一些能夠進行快速看法的幫助類
下麵舉例子介紹HtmlHelper和UrlHelper類
(1)Url.Action與Url.RouteUrl
回想一下之前的crud例子
我們在寫url地址的時候都是直接寫死的
例如:
[html] view plain copy- <td>
- <a href="/Home/Create">新增</a>
- </td>
這樣看起來似乎沒有什麼問題
但是在mvc中這就是一個隱藏的巨大問題
因為在mvc中,我們可以隨意的通過配置路由在更改url的請求格式!
[csharp] view plain copy- routes.MapRoute(
- name: "Default",
- //之前的路由配置
- //url: "{controller}/{action}/{id}",
- //現在改為:
- url: "{action}/{controller}/{id}",
- defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
- );
這麼一來,新增超鏈接請求的就是Create控制器下麵的Home方法
但是伺服器端只有Home控制器下的Create方法!如果不對url進行修改的話會返回無法找到該方法的錯誤
那麼就改呀
但是仔細想想
如果項目規模非常大,url非常多
難道要一個個去改嗎?!
先不說花費大量功夫終於改完了
突然接到通知說路由配置又要改
oh~shit!
但是不要慌~
萬能的mvc框架為你提供瞭解決方案~
將之前的url改為使用UrlHelper的格式
使用Url.Action方法
第一個參數指定action方法名,第二個參數指定控制器名
之後生成運行,查看生成的新增超鏈接
搞定~而且使用UrlHelper類生成的超鏈接是根據路由配置來生成的
程式員再也不用操心前臺url的格式了~
(但是這裡看到這個url有點奇怪,怎麼只有Create沒有Home,這是因為在路由配置中預設的控制器就是Home,而預設的action為Index,如果請求的控制器或者action方法是預設的它直接省略不寫~)
使用Url.Action方法是根據路由表中的第一個路由來生成的
但是通常路由表中的路由不僅僅是一個,也有可能很多個
這時候如果我們需要根據第n個路由配置來生成url怎麼搞?
使用Url.RouteUrl方法
如圖所示
該方法可以根據指定的路由名稱來生成url