Asp.net mvc 知多少(七)

本系列主要翻譯自《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)致難于管理窿侈。

Area截圖

每一個(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操作偎蘸。
下面是具體的步驟:

1.添加Controller
2.選擇腳手架模板生成CRUD
2.命名Controller
最終生成的代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庄蹋,一起剝皮案震驚了整個(gè)濱河市瞬内,隨后出現(xiàn)的幾起案子迷雪,更是在濱河造成了極大的恐慌,老刑警劉巖虫蝶,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件章咧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡能真,警方通過(guò)查閱死者的電腦和手機(jī)赁严,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)粉铐,“玉大人疼约,你說(shuō)我怎么就攤上這事◎茫” “怎么了程剥?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)汤踏。 經(jīng)常有香客問(wèn)我织鲸,道長(zhǎng),這世上最難降的妖魔是什么溪胶? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任搂擦,我火速辦了婚禮,結(jié)果婚禮上哗脖,老公的妹妹穿的比我還像新娘瀑踢。我一直安慰自己,他們只是感情好才避,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布丘损。 她就那樣靜靜地躺著,像睡著了一般工扎。 火紅的嫁衣襯著肌膚如雪徘钥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天肢娘,我揣著相機(jī)與錄音呈础,去河邊找鬼舆驶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛而钞,可吹牛的內(nèi)容都是我干的沙廉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼臼节,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撬陵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起网缝,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤巨税,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后粉臊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體草添,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年扼仲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了远寸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屠凶,死狀恐怖驰后,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矗愧,我是刑警寧澤灶芝,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贱枣,受9級(jí)特大地震影響监署,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纽哥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一钠乏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧春塌,春花似錦晓避、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吼句,卻和暖如春锅必,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工搞隐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驹愚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓劣纲,卻偏偏與公主長(zhǎng)得像逢捺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子癞季,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容