Asp.net mvc 知多少(七)

本系列主要翻譯自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可訪問http://www.dotnettricks.com/free-ebooks自行下載。該書主要分為兩部分,ASP.NET MVC 5、ASP.NET WEB API2。本書最大的特點(diǎ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(用戶控件)用來進(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)制的。視圖以 "_" 為前命名則說明該view是一個(gè)可重用的。


Q71. 如何在controller中返回partial view ?
Ans.return PartialView(options);
其中 options可以是一個(gè)Model或View名稱。


Q72. ASP.NET MVC有哪幾種方式用來返回一個(gè)Partial View?
Ans. 主要有以下四種方式:
Html.RenderPartial

  • 這種方式的結(jié)果會(huì)直接寫入Http響應(yīng)流,也就意味著它使用與當(dāng)前頁面/模板相同的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來顯示評(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)前頁面/模板相同的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à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編碼的字符串來呈現(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來顯示評(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à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(職能)來分離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),用來分開保存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 也是用來創(chuàng)建可重用的組件,一個(gè)Partial View可用通過一個(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中通過@Html.RenderAction@Html.Action 來調(diào)用。


Q76. 什么是Scaffolding(腳手架)?
Ans. Scaffolding 是一個(gè)用來高效生成基本的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的幫助下生成基本的代碼用來基本的CRUD操作。這些模板使用的是Visual Studio T4 模板系統(tǒng)去生成視圖來進(jìn)行CRUD操作。
下面是具體的步驟:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容