本系列主要翻譯自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可訪問http://www.dotnettricks.com/free-ebooks自行下載。該書主要分為兩部分,ASP.NET MVC 5、ASP.NET WEB API2。本書最大的特點是以面試問答的形式進行展開。通讀此書,會幫助你對ASP.NET MVC有更深層次的理解。
由於個人技術水平和英文水平也是有限的,因此錯誤在所難免,希望大家多多留言指正。
系列導航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)
Asp.net mvc 知多少(六)
Asp.net mvc 知多少(七)
Asp.net mvc 知多少(八)
本節主要講解了PartialView
Q70. 什么是ASP.NET MVC 中的 Partial View(分布視圖)?
Ans. Partial view 類似於ASP.NET Web forms 中的user control(用戶控件)用來進行代碼重用。 Partial views 幫助我們減少重復代碼。
因此 Partial views是可重用的,像Header和Footer視圖那樣。
我們可以使用它去顯示博客評論,商品類別,社交按鈕,動態時鍾日歷等等。
創建partial view 的最佳實踐是在Shared文件夾創建並以 "_"為前綴命名,但這並不是強制的。視圖以 "_" 為前命名則說明該view是一個可重用的。
Q71. 如何在controller中返回partial view ?
Ans. return PartialView(options);
其中 options可以是一個Model或View名稱。
Q72. ASP.NET MVC有哪幾種方式用來返回一個Partial View?
Ans. 主要有以下四種方式:
Html.RenderPartial
- 這種方式的結果會直接寫入Http響應流,也就意味着它使用與當前頁面/模板相同的TextWriter對象。
- 這個方法返回值類型為void。
- 可以直接使用不需要創建action。
- 當Partial view中要顯示的數據已經在相應的View Model中時,使用RenderPartial 方法將非常好用。比如:在博客中要顯示一篇文章的評論,就可以使用RenderPartial來顯示評論,因為文章信息及評論一般文章的View Model中填充了。
@{Html.RenderPartial("_Comments");}
- 這個方法比Partial方法快是因為它的結果直接寫入響應流。
Html.RenderAction
- T這種方式的結果會直接寫入Http響應流,也就意味着它使用與當前頁面/模板相同的TextWriter對象。
- 這種方式,我們需要創建一個對應的child action 去呈現對應的partial view。
- 當Partial view中要顯示的數據與相應的View model相互獨立時,使用這種方式比較有用。比如:在博客中需要在每一個頁面顯示文章分類列表。因為在文章分類列表會在不同的model中進行填充。
@{Html.RenderAction("Category","Home");}
- 當你想緩存一個partial view時,這個方法將是最佳選擇。
- 這個方法比Action方法快是因為它的結果直接寫入響應流。
Html.Partial
- 以html編碼的字符串來呈現partial view。
- 這個方法的結果可以存儲在一個變量中,因為返回類型為string。
- 可以直接使用不需要創建action。
- 和RenderPartial相似,當Partial view中要顯示的數據已經在相應的View Model中時,使用Partial 方法將非常好用。比如:在博客中要顯示一篇文章的評論,就可以使用Partial來顯示評論,因為文章信息及評論一般文章的View Model中填充了。
@Html.Partial("_Comments")
Html.Action
- 以HtmlString方式呈現partial view。
- 這種方式,我們需要創建一個對應的child action 去呈現對應的partial view。
- 這個方法的結果可以存儲在一個變量中,因為返回類型為string。
- 當Partial view中要顯示的數據與相應的View model相互獨立時,使用這種方式比較有用。比如:在博客中需要在每一個頁面顯示文章分類列表。因為在文章分類列表會在不同的model中進行填充。
@{Html.Action("Category","Home");}
- 這個方法將也是一個最佳選擇,當你想緩存一個partial view時。
Q73. 介紹下ASP.NET MVC中的Area?
Ans. Areas 是在Asp.net MVC2引入的。根據Web應用的functional sections(職能)來分離models, views, 和 controllers。例如administration(后台管理), billing(訂單處理), customer support(客戶支持)等。
在大的web項目中,使用Area非常有幫助,它將每個模塊放到單獨的文件夾下處理。但同時,使用Area會導致難於管理。
每一個Mvc area擁有自己的文件結構,用來分開保存controllers, views, 和 models。這也有利於多個開發者共同開發同一個Web應用,而互不干擾。
Q74. ASP.NET MVC中如何注冊Area?
Ans. 在使用Area之前,確保已經在Global.asax的Application_Start方法中注冊。
protected void Application_Start()
{
//Register all application Areas
AreaRegistration.RegisterAllAreas();
}
需要記住的是,必須在最開始注冊Area,以至於注冊的settings, filters 和 routes
能夠應用於Area。
Q75. 什么是Child action以及如何調用它?
Ans. 使用Child action 非去創建可重用的組件非常方便,它能直接植入你的視圖。
ASP.NET MVC 的partial views 也是用來創建可重用的組件,一個Partial View可用通過一個Action 方法呈現。
Action方法可以用 child 特性標記,從而擁有獨立於父視圖的MVC生命周期。
Child action 不能獨立被調用,一般在View的內部被調用。
[ChildActionOnly]
public ActionResult MenuBar()
{
//TODO:
return PartialView();
}
一個child action可以在一個View中通過@Html.RenderAction
或@Html.Action
來調用。
Q76. 什么是Scaffolding(腳手架)?
Ans. Scaffolding 是一個用來高效生成基本的CRUD代碼。
而且你可以根據自己的需求自定義自動生成的代碼。
Scaffolding 包括page templates, entity page templates, field page templates, 以及 filter templates。這些模板統稱腳手架模板,幫助我們快速構建功能性數據驅動網站。
Q77. 腳手架模板在ASP.NET MVC是如何工作的?
Ans. Scaffold templates 在EF的幫助下生成基本的代碼用來基本的CRUD操作。這些模板使用的是Visual Studio T4 模板系統去生成視圖來進行CRUD操作。
下面是具體的步驟: