本系列主要翻譯自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可訪問http://www.dotnettricks.com/free-ebooks自行下載。該書主要分爲兩部分,ASP.NET MVC 五、ASP.NET WEB API2。本書最大的特色是以面試問答的形式進行展開。通讀此書,會幫助你對ASP.NET MVC有更深層次的理解。
因爲我的技術水平和英文水平也是有限的,所以錯誤在所不免,但願你們多多留言指正。
系列導航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)css
本節主要講解佈局頁(Layout)的使用html
Q40. 什麼是 ASP.NET MVC的佈局頁(Layouts)?
Ans. Layouts(佈局頁)是用來使asp.net mvc中的views保持一致的外觀體驗。與webforms的master pages功能類似,但比其更加簡單且可擴展性更強。下面是一個佈局頁的代碼展現:jquery
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> @RenderBody() @Scripts.Render("~/bundles/jquery") @RenderSection("scripts", required: false) </body> </html>
可使用layout爲你的網站定義一個通用的模板。layout能夠直接在view的頂部直接聲明:web
@{ Layout = "~/Views/Shared/SiteLayout.cshtml"; }
Q41. 介紹下ASP.NET MVC中Sections(節)?
Ans. 經過section能夠在layout中指定佔用一塊內容區域。能夠在view中按如下方式定義section。面試
@section header{ <h1>Header Content</h1> }
在layout中經過@RenderSection("header")去渲染上面定義的section。
默認來講,若是在layout中定義了須要渲染的section,那麼在view中就必須實現。但能夠經過如下方式,限定section是可選的。@RenderSection("header",false)
備註:View只能定義已經在layout中指定渲染的section,不然會拋出異常。瀏覽器
Q42. RenderBody 和 RenderPage 的做用是?
Ans. RenderBody 方法是在layout頁面中調用的,是用來渲染呈現子頁面/視圖。它相似於webform引擎中master頁中的ContentPlaceHolder。一個layout頁面中只能有一個 RenderBody 方法。網絡
<body> @RenderBody() @RenderPage("~/Views/Shared/_Header.cshtml") @RenderPage("~/Views/Shared/_Footer.cshtml") @RenderSection("scripts",false) @section scripts{ <script src="~/Scripts/jquery-1.7.1.min.js"></script> } </body>
RenderPage 方法也是在layout頁面中用來渲染加應用程序中的其餘頁面。一個layout頁面中能夠有多個RenderPage 方法。併發
@RenderPage("~/Views/Shared/_Header.cshtml");
Q43. Styles.Render 和Scripts.Render的功能是?
Ans. 它們是用來捆綁多個css文件和js文件,以提升網絡加載速度和頁面解析速度。Style.Render是用來呈現定義在BundleConfig.cs中捆綁的css文件。 Styles.Render爲捆綁的css建立style標籤。
Scripts.Render 也是用來呈現捆綁的script文件。它會爲捆綁的script文件建立script標籤。mvc
public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( "~/Scripts/jquery.unobtrusive*", "~/Scripts/jquery.validate*")); bundles.Add(new StyleBundle("~/Content/themes/base/css").Include( "~/Content/themes/base/jquery.ui.core.css", "~/Content/themes/base/jquery.ui.resizable.css", "~/Content/themes/base/jquery.ui.selectable.css", "~/Content/themes/base/jquery.ui.button.css", "~/Content/themes/base/jquery.ui.dialog.css", "~/Content/themes/base/jquery.ui.theme.css")); }
當關閉優化時Styles.Render和Scripts.Render會爲CSS bundle(script bundle)中的定義的每個css(script)生成一個style(script)標籤。當開啓優化時, Styles.Render 和Scripts.Render生成惟一的style和script標籤,其中帶有版本戳的URL表明整個捆綁的css和script。app
Q44. ASP.NET MVC中如何啓用捆綁優化?
Ans.
使用BundleTable捆綁多個css文件和js文件,以提升網絡加載速度和頁面解析速度。
經過在Global.asax.cs文件中修改BundleTable的EnableOptimizations屬性來打開和關閉捆綁優化。
protected void Application_Start() { //other code has been removed for clarity //disable optimization System.Web.Optimization.BundleTable.EnableOptimizations = false; }
Q45. 什麼是ViewStart?
Ans. _ViewStart.cshml 頁面是服務於具備相同佈局的view(s) 。該文件代碼優於同一目錄下的其餘view代碼先執行。該文件也將遞歸應用於子文件夾下的view(s)。 默認,
ASP.NET MVC 項目在Views文件夾下僅有一個 _ViewStart.cshtml 文件。該文件中爲你mvc 應用程序指定了默認的layout。
@{ Layout = "~/Views/Shared/Layout.cshtml"; }
由於上面這段代碼會在任何view以前運行,因此能夠經過override Layout 屬性爲view指定一個不一樣的layout。
Q46. 何時去使用 _ViewStart?
Ans. 當有一系列的view具備相同的設置, 就可使用 _ViewStart.cshtml 來放置通用的視圖設置。 若是有任何視圖須要修改通用的設置能夠經過在view中重載通用設置指定一個新值便可。
Q47. ASP.NET MVC中有哪幾種方式去修改默認的layout?
1.修改根目錄下的Views文件夾的 _ViewStart文件。_ViewStart爲web application定義了默認layout頁面。能夠經過代碼根據不一樣的Controller加載不一樣的layout。
@{ var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToSt ring(); string layout = ""; if (controller == "Admin") { layout = "~/Views/Shared/_AdminLayout.cshtml"; } else { layout = "~/Views/Shared/_Layout.cshtml"; } Layout = layout; }
2.在Views文件夾的某一個View目錄下新增 _ViewStart 文件。
3.在View頁面的頂部修改Layout
@{ Layout = "~/Views/Shared/_AdminLayout.cshtml"; }
4.在ActionResult中指定Layout
public ActionResult Index() { RegisterModel model = new RegisterModel(); //TO DO: return View("Index", "_AdminLayout", model); }
Q48. 介紹下ASP.NET MVC項目中的App_Start文件夾?
Ans. App_Start文件夾是從MVC4引入的,包含如下配置文件,好比
BundleConfig.cs, FilterConfig.cs,RouteConfig.cs,WebApiConfig.cs 。全部的設置都是在Global.asax.cs文件的Application_Start方法中被註冊。
Q49. ASP.NET MVC中返回/呈現一個View都有哪幾種方式?
Ans. 主要有如下四種方式:
備註: