一、首先新建一個MVC項目,打開_Layout.cshtml。見圖
這是微軟自動生成的一個母版頁,我們從母版頁開始看
1.@Styles.Render("~/Content/css")
在頁面上可以用@Styles.Render("~/Content/css") 來加載css
首先要在App_Start 里面BundleConfig.cs 文件里面 添加要包含的css文件,開開這個文件看下
我們會發現這里設置了兩個css樣式,設置好后可以理解為一種鍵值對的形式,引用的時候直接@Styles.Render("~/Content/css")取鍵就可以
2.@Scripts.Render("~/bundles/modernizr")
這個也和css設置是一樣的,調用方式也是相同的。
3.@Html.ActionLink 這個着重說一下,
在MVC的Rasor視圖引擎中,微軟采用一種全新的方式來表示從前的超鏈接方式,它代替了從前的繁雜的超鏈接標簽,讓代碼看起來更加簡潔。通過瀏覽器依然會解析成傳統的a標簽。除此之外,還允許我們添加Html屬性。下面來看看@Html.ActionLink()的使用方法吧。
(1)@Html.ActionLink("linkText", "actionName")
這種重載的第一個參數是該鏈接要顯示的文字,第二個參數是對應的控制器的方法(Action),默認控制器為當前頁面對應的控制器。例如,當前頁面的控制器為ProductsController:@Html.ActionLink("detial", "Detial")會生成<a href="/Products/Detail">detail</a>
(2) @Html.ActionLink("linkText", "actionName","controllerName")
該重載比第一個重載多了一個參數,他指定了控制器的名稱。
例如,@Html.ActionLink("detail", "Detail", "Products")會生成<a href="Products/Detail">detail</a>
(3) @Html.ActionLink("linkText", "actionName","controllerName",routeValues)
相對於上一種重載,該重載新增了routeValue參數,routeValue可以向action傳遞參數。
例如,@Html.ActionLink("detail", "Detail", ,"Products",new{ id = 1 })會生成<a href="Products/Detail/1">detail</a>
(4)@Html.ActionLink("linkText", "actionName", "controllerName", routeValues, htmlAttributes)
這是最全的重載,可以設置標簽和樣式。
例如,@Html.ActionLink("detail", "Detail", "Products",new{ id = 1 }, new{ target = "_blank" })會生成<a href="Products/Detail/1" target="_blank">detail</a>,需要注意的是如果寫成new{ target="_blank", class="className" }則會報錯,因為Class是C#的關鍵字,此時應該寫成@class="className"。
4.@RenderBody()標簽
這個標簽就是一個占位符,當一個視圖使用了布局頁的時候,該視圖就會被加載到占位符的位置
5.@RenderSection("scripts", required: false)
布局頁面還有節(Section)的概念,也就是說,如果某個視圖模板中定義了一個節,那么可以把它單獨呈現出來
第一個參數是設置一個節,也可以說相當於一個占位符的作用
如圖設置一個名為hahah的節,我們去在子頁面用一下
看使用效果。但是當我們在母版頁設置了這個節點,子頁面不實現的話,就會報錯,刪掉@section hahha再運行
這是因為我在_Layout.cshtml中使用的是@RenderSection("hahah")他要求所有子頁都要實現,
可以使用它的另外一個重載@RenderSection("hahah",false),第二個參數代表它不是必須的,就不會拋出異常。 還有,當我在母版頁中定義了@RenderSection("SubMenu",false)的時候,我希望當所有子頁都沒有實現這個Section的時候,母版頁可以有自己的呈現內容,就可以用