本系列主要翻譯自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan俊性,想看英文原版的可訪問(wèn)http://www.dotnettricks.com/free-ebooks自行下載贷洲。該書主要分為兩部分遇绞,ASP.NET MVC 5缚够、ASP.NET WEB API2呵晚。本書最大的特點(diǎn)是以面試問(wèn)答的形式進(jìn)行展開。通讀此書蒙幻,會(huì)幫助你對(duì)ASP.NET MVC有更深層次的理解嘱腥。
由于個(gè)人技術(shù)水平和英文水平也是有限的,因此錯(cuò)誤在所難免朽色,希望大家多多留言指正邻吞。
系列導(dǎo)航
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 知多少(九)
Asp.net mvc 知多少(十)
本節(jié)主要講解了PartialView
Q70. 什么是ASP.NET MVC 中的 Partial View(分布視圖)?
Ans. Partial view 類似于ASP.NET Web forms 中的user control(用戶控件)用來(lái)進(jìn)行代碼重用。 Partial views 幫助我們減少重復(fù)代碼葫男。
因此 Partial views是可重用的抱冷,像Header和Footer視圖那樣。
我們可以使用它去顯示博客評(píng)論腾誉,商品類別徘层,社交按鈕,動(dòng)態(tài)時(shí)鐘日歷等等利职。
創(chuàng)建partial view 的最佳實(shí)踐是在Shared文件夾創(chuàng)建并以 "_"為前綴命名趣效,但這并不是強(qiáng)制的。視圖以 "_" 為前命名則說(shuō)明該view是一個(gè)可重用的猪贪。
Q71. 如何在controller中返回partial view ?
Ans.return PartialView(options);
其中 options可以是一個(gè)Model或View名稱跷敬。
Q72. ASP.NET MVC有哪幾種方式用來(lái)返回一個(gè)Partial View?
Ans. 主要有以下四種方式:
Html.RenderPartial
- 這種方式的結(jié)果會(huì)直接寫入Http響應(yīng)流热押,也就意味著它使用與當(dāng)前頁(yè)面/模板相同的TextWriter對(duì)象西傀。
- 這個(gè)方法返回值類型為void。
- 可以直接使用不需要?jiǎng)?chuàng)建action桶癣。
- 當(dāng)Partial view中要顯示的數(shù)據(jù)已經(jīng)在相應(yīng)的View Model中時(shí)拥褂,使用RenderPartial 方法將非常好用。比如:在博客中要顯示一篇文章的評(píng)論牙寞,就可以使用RenderPartial來(lái)顯示評(píng)論饺鹃,因?yàn)槲恼滦畔⒓霸u(píng)論一般文章的View Model中填充了。
@{Html.RenderPartial("_Comments");}
- 這個(gè)方法比Partial方法快是因?yàn)樗慕Y(jié)果直接寫入響應(yīng)流间雀。
Html.RenderAction
- T這種方式的結(jié)果會(huì)直接寫入Http響應(yīng)流悔详,也就意味著它使用與當(dāng)前頁(yè)面/模板相同的TextWriter對(duì)象。
- 這種方式惹挟,我們需要?jiǎng)?chuàng)建一個(gè)對(duì)應(yīng)的child action 去呈現(xiàn)對(duì)應(yīng)的partial view茄螃。
- 當(dāng)Partial view中要顯示的數(shù)據(jù)與相應(yīng)的View model相互獨(dú)立時(shí),使用這種方式比較有用连锯。比如:在博客中需要在每一個(gè)頁(yè)面顯示文章分類列表归苍。因?yàn)樵谖恼路诸惲斜頃?huì)在不同的model中進(jìn)行填充。
@{Html.RenderAction("Category","Home");}
- 當(dāng)你想緩存一個(gè)partial view時(shí)运怖,這個(gè)方法將是最佳選擇霜医。
- 這個(gè)方法比Action方法快是因?yàn)樗慕Y(jié)果直接寫入響應(yīng)流。
Html.Partial
- 以html編碼的字符串來(lái)呈現(xiàn)partial view驳规。
- 這個(gè)方法的結(jié)果可以存儲(chǔ)在一個(gè)變量中肴敛,因?yàn)榉祷仡愋蜑閟tring。
- 可以直接使用不需要?jiǎng)?chuàng)建action吗购。
- 和RenderPartial相似医男,當(dāng)Partial view中要顯示的數(shù)據(jù)已經(jīng)在相應(yīng)的View Model中時(shí),使用Partial 方法將非常好用捻勉。比如:在博客中要顯示一篇文章的評(píng)論镀梭,就可以使用Partial來(lái)顯示評(píng)論,因?yàn)槲恼滦畔⒓霸u(píng)論一般文章的View Model中填充了踱启。
@Html.Partial("_Comments")
Html.Action
- 以HtmlString方式呈現(xiàn)partial view报账。
- 這種方式研底,我們需要?jiǎng)?chuàng)建一個(gè)對(duì)應(yīng)的child action 去呈現(xiàn)對(duì)應(yīng)的partial view。
- 這個(gè)方法的結(jié)果可以存儲(chǔ)在一個(gè)變量中透罢,因?yàn)榉祷仡愋蜑閟tring榜晦。
- 當(dāng)Partial view中要顯示的數(shù)據(jù)與相應(yīng)的View model相互獨(dú)立時(shí),使用這種方式比較有用羽圃。比如:在博客中需要在每一個(gè)頁(yè)面顯示文章分類列表乾胶。因?yàn)樵谖恼路诸惲斜頃?huì)在不同的model中進(jìn)行填充。
@{Html.Action("Category","Home");}
- 這個(gè)方法將也是一個(gè)最佳選擇朽寞,當(dāng)你想緩存一個(gè)partial view時(shí)识窿。
Q73. 介紹下ASP.NET MVC中的Area?
Ans. Areas 是在Asp.net MVC2引入的脑融。根據(jù)Web應(yīng)用的functional sections(職能)來(lái)分離models, views, 和 controllers喻频。例如administration(后臺(tái)管理), billing(訂單處理), customer support(客戶支持)等。
在大的web項(xiàng)目中肘迎,使用Area非常有幫助半抱,它將每個(gè)模塊放到單獨(dú)的文件夾下處理。但同時(shí)膜宋,使用Area會(huì)導(dǎo)致難于管理窿侈。
每一個(gè)Mvc area擁有自己的文件結(jié)構(gòu),用來(lái)分開保存controllers, views, 和 models秋茫。這也有利于多個(gè)開發(fā)者共同開發(fā)同一個(gè)Web應(yīng)用史简,而互不干擾。
Q74. ASP.NET MVC中如何注冊(cè)Area肛著?
Ans. 在使用Area之前圆兵,確保已經(jīng)在Global.asax的Application_Start方法中注冊(cè)。
protected void Application_Start()
{
//Register all application Areas
AreaRegistration.RegisterAllAreas();
}
需要記住的是枢贿,必須在最開始注冊(cè)Area殉农,以至于注冊(cè)的settings, filters 和 routes
能夠應(yīng)用于Area。
Q75. 什么是Child action以及如何調(diào)用它?
Ans. 使用Child action 非去創(chuàng)建可重用的組件非常方便局荚,它能直接植入你的視圖超凳。
ASP.NET MVC 的partial views 也是用來(lái)創(chuàng)建可重用的組件,一個(gè)Partial View可用通過(guò)一個(gè)Action 方法呈現(xiàn)耀态。
Action方法可以用 child 特性標(biāo)記轮傍,從而擁有獨(dú)立于父視圖的MVC生命周期。
Child action 不能獨(dú)立被調(diào)用首装,一般在View的內(nèi)部被調(diào)用创夜。
[ChildActionOnly]
public ActionResult MenuBar()
{
//TODO:
return PartialView();
}
一個(gè)child action可以在一個(gè)View中通過(guò)@Html.RenderAction
或@Html.Action
來(lái)調(diào)用。
Q76. 什么是Scaffolding(腳手架)?
Ans. Scaffolding 是一個(gè)用來(lái)高效生成基本的CRUD代碼仙逻。
而且你可以根據(jù)自己的需求自定義自動(dòng)生成的代碼驰吓。
Scaffolding 包括page templates, entity page templates, field page templates, 以及 filter templates涧尿。這些模板統(tǒng)稱腳手架模板,幫助我們快速構(gòu)建功能性數(shù)據(jù)驅(qū)動(dòng)網(wǎng)站檬贰。
Q77. 腳手架模板在ASP.NET MVC是如何工作的姑廉?
Ans. Scaffold templates 在EF的幫助下生成基本的代碼用來(lái)基本的CRUD操作。這些模板使用的是Visual Studio T4 模板系統(tǒng)去生成視圖來(lái)進(jìn)行CRUD操作偎蘸。
下面是具體的步驟: