ASP.Net Core 2.0中的Razor Page不是WebForm
隨著.net core2.0的發(fā)布,我們可以創(chuàng)建2.0的web應(yīng)用了。2.0中新東西的出現(xiàn),會(huì)讓我們忘記老的東西,他就是Razor Page。下面的這篇博客將會(huì)介紹ASP.Net Core 2.0中的Razor Page。
在ASP.Net Core 2.0新特點(diǎn)之一就是支持Razor Page。今天的Razor Page是ASP.Net Core MVC中的一個(gè)子集。ASP.Net Core MVC 支持Razor Page意味著Razor Page應(yīng)用從技術(shù)上來說就是MVC應(yīng)用,同時(shí)Razor Page和MVC 視圖有相同的特性。
什么是Razor Page?
對(duì)于MVC的開發(fā)者來說,可能想問,為什么我們需要另外一種方式來創(chuàng)建我們的ASP.Net Core 站點(diǎn)?是MVC不能滿足我的需求?通過在社區(qū)收集的信息,我發(fā)現(xiàn)大概有一下原因:
(1)Razor Page對(duì)于開發(fā)者,甚至是來自其他腳本語言比如:ASP、PHP的開發(fā)者來說很容易創(chuàng)建我們的web應(yīng)用,同時(shí)Razor Page要比MVC更加的輕量級(jí)。
(2)Razor Page非常適合不大的場(chǎng)景,在這種場(chǎng)景下可以構(gòu)建控制器和模型來作為單獨(dú)的類別。
我完全是不同意這些觀點(diǎn)的,因?yàn)镸VC在ASP.Net Core 下是輕巧靈活的,我也用MVC來覆蓋較小的場(chǎng)景, 它的方式更快, 因?yàn)槲沂褂玫臇|西, 我已經(jīng)非常了解了。MVC 引入的代碼量并不是很大,因此對(duì)于小型的應(yīng)用來說差異不會(huì)很大。
?
創(chuàng)建一個(gè)Razor Page應(yīng)用
在Visual Studio 2017 Preview 2我們可以使用Razor Page的模板來創(chuàng)建項(xiàng)目
點(diǎn)擊確定即可。
項(xiàng)目結(jié)構(gòu)
項(xiàng)目結(jié)構(gòu)很像MVC但是這里沒有Controller和Views文件夾,只有一個(gè)Pages文件夾,里面包含了所有的Razor Views.在上下文中Razor Views被叫做“Pages”。這些Pages很像MVC中的Views,但是他們也包含了在MVC中控制器的類。稍后我會(huì)介紹Razor Page。Program和Startup類和MVC應(yīng)用中是一樣的,不僅僅是名字還有代碼。如前所述,Razor Page在MVC的支持下,是其中的一部分。這里可以將表現(xiàn)層和業(yè)務(wù)邏輯分開。我們可以為頁面創(chuàng)建代碼隱藏文件,并將它命名為PageName.cshtml.cs。代碼隱藏文件所包含的類被稱為“Page Model”。請(qǐng)注意,創(chuàng)建的解決方案中的 About.cshtml、Contact.cshtml、Error.cshtml、Index.cshtml 頁面中都包含代碼隱藏文件。正如創(chuàng)建的Razor Page,它有它自己的模式。稱它為View-ViewModel,它像MVC和MVVM的混合。當(dāng)我們考慮編碼的時(shí)候,Razor Pages會(huì)讓我們更接近老的ASP。現(xiàn)在它更object-oriented,更接近MVC。這就是關(guān)于頁面的代碼,同時(shí)也是默認(rèn)的Razor Pages應(yīng)用程序的一部分。
Page 總是用 @page 指令標(biāo)記,并且@page必須要放到開始的位置,有了它,會(huì)告訴視圖引擎,這是Razor Page不是一個(gè)標(biāo)準(zhǔn)的MVC View。我們可以指定比常規(guī)MVC模型更像視圖模型的模型。實(shí)際上,這里的模型更像是控制器和模型的混合。那些使用XAML的人應(yīng)該發(fā)現(xiàn)他熟悉的概念,下面是關(guān)于頁面的代碼隱藏或頁面模型。
我們使用Handlers作為處理HTTP請(qǐng)求(GET,POST,PUT,DELETE ..)的方法。例如,我們可以有以下方法:
OnGet / OnGetAsync
OnPost / OnPostAsync
OnDelete / OnDeleteAsync
這些方法將由ASP.NET Core根據(jù)HTTP請(qǐng)求的類型自動(dòng)匹配,就我個(gè)人而言, 我發(fā)現(xiàn)這些 OnGet () 和 OnPost () 方法比 MVC 控制器的操作更隱秘, 它們清楚地傳達(dá)了它們的目的。
我們?cè)倏纯碦azor Page 沒有code-behind的情況:
現(xiàn)在, 讓我們看看只有Page, 而無需代碼隱藏的文件。它的工作方式與代碼隱藏類的版本完全一樣。
方法和屬性在 @functions 節(jié)中定義。我只是把頁面模型的內(nèi)容移到頁面本身, 它就能正常工作了。實(shí)際上, 最好將這些代碼隱藏文件和視圖從代碼中清除, 因?yàn)橐晥D中的代碼不容易使用自動(dòng)測(cè)試進(jìn)行測(cè)試。此外, 如果視圖隨著時(shí)間的推移變得更加復(fù)雜, 那么, 如果只在隱藏代碼文件中增加代碼這種方式是很好的。
最后:
我不知道有多少人在今天使用Razor Page, 但它仍然是輕量級(jí)的選擇, 我也認(rèn)為這可能是一個(gè)簡(jiǎn)單項(xiàng)目的選擇, 在這里不需要很好的粒度和對(duì)代碼的控制, 但我仍然覺得在有些情況下與 MVC 可以一起用。無論如何, 擁有更多的選擇和 entry-level 的技術(shù)從來都不是壞事。我希望有明確的使用場(chǎng)景下去使用Razor Page, 否則這項(xiàng)技術(shù)將永遠(yuǎn)在 MVC 的影響下只是一個(gè)小兄弟。
?再次說明:Razor Page 不是ASP.Net WebForm,Razor Page 它是基于 MVC 的大部分, 它不從 ASP.NET WebForm中使用任何組件。Razor Page更 MVVM 的模式, 并遵循單一的責(zé)任原則,優(yōu)于 MVC, 其中一個(gè)控制器為多個(gè)視圖做許多事情。因此, 每個(gè)頁面都有其單頁模型。它的速度更快, 更苗條--控制器被消除 (cshtml 和 Index.cshtml.cs)。更詳細(xì)的可以參考:?https://www.youtube.com/watch?v=Lu1wBtf2CKE&t=1780s
相關(guān)文章:?
.NET Core 2.0 正式發(fā)布信息匯總
.NET Standard 2.0 特性介紹和使用指南
.NET Core 2.0 的dll實(shí)時(shí)更新、https、依賴包變更問題及解決
.NET Core 2.0 特性介紹和使用指南
Entity Framework Core 2.0 新特性
體驗(yàn) PHP under .NET Core
.NET Core 2.0使用NLog
升級(jí)項(xiàng)目到.NET Core 2.0,在Linux上安裝Docker,并成功部署
解決Visual Studio For Mac Restore失敗的問題
ASP.NET Core 2.0 特性介紹和使用指南
.Net Core下通過Proxy 模式 使用 WCF
.NET Core 2.0 開源Office組件 NPOI
ASP.NET Core - Razor頁面之Handlers處理方法
ASP.NET Core Razor頁面 vs MVC
Razor Page–Asp.Net Core 2.0新功能 ?Razor Page介紹
原文地址:http://www.cnblogs.com/runningsmallguo/articles/7376565.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的ASP.Net Core 2.0中的Razor Page不是WebForm的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker打包 Asp.Net Cor
- 下一篇: asp.net ajax控件工具集 Au