在Blazor和MVC中渲染视图

时间:2019-10-25 02:22:11

标签: .net asp.net-mvc razor-pages blazor blazor-server-side

我已经使用.Net几年了,但是一直作为API使用,所以我从未做过MVC或Razor。现在Blazor出现了,尝试使用完整的.Net堆栈似乎是个好主意。

使用Blazor时,哪里会渲染项目列表?

MVC和Razor就像PHP一样工作,您直接将包含所有项目和内容的html / js吐给客户端。 Angular和其他SPA可以访问后端API,获取数据并渲染所有前端。

Blazor应该是SPA的替代品,因此应该在前端呈现吗? (是的,服务器端制作DOM差异并进行传输,但在这种情况下仍是前端呈现)。但是,为什么每个人都在谈论使用MVC或Razor?

2 个答案:

答案 0 :(得分:1)

TL; DR

模型视图控制器(MVC)是一种设计模式,旨在保持数据与如何呈现数据之间的分隔。

ASP.NET MVC使用该MVC模式,但它并不是ASP.NET独有的,并且该模式对于在客户端和服务器端填充网页同样有效。

Razor是可用于“模型视图控制器”的“视图”部分的众多语法之一。

答案越长

分别回答两个问题:

为什么提到MVC

出现MVC的原因有两个。首先,很多人希望将Blazor合并到现有的MVC网站中,因此您会在这种情况下看到对MVC的提及。 Blazor在这里运作良好,因为它很高兴与另一项技术(例如ASP.NET MVC以及non-.NET sites)并存。

不过,更笼统地说,MVC不仅指ASP.NET MVC,它实际上是指Model View Controller设计模式,这是一种将关注点上呈现的数据概念分离的方法。页面(模型),渲染方式(视图)以及将数据放入渲染模板的东西(控制器)。

在ASP.NET MVC中,控制器驻留在服务器上,并将模型的数据放入那里的视图中,但这不是必须的,从客户端获取数据(从API中获得)同样有效),然后也在客户端填充视图。像Angular这样的前端框架就是这种方式。

随着Blazor应用程序的增长,您可能会发现需要在页面呈现方式,检索数据的内容,数据本身和应用程序状态之间进行区分。到那时,设计模式可以提供帮助。

一开始似乎无法在客户端Blazor中使用MVC模式,因为路由将输入的页面请求解析为Blazor页面,而不是像ASP.NET MVC那样将Controller类解析为控制器类,但是您可以想到Blazor页面本身作为控制器。该页面有效地从某处获取数据(模型),并将其与Razor代码(视图)组合在一起,这正是Controller的用途。

其他演示模式,例如MVVM也可能有用,例如FluxRedux之类的状态模式。

重要的是要注意到Blazor团队已经表示,他们正在尝试使Blazor模式不可知。这是a quote from Dan Roth

  

Blazor的目标是针对Web开发人员的广泛受众,   因此,我们并不是专门针对与   WPF / UWP / Xamarin.Forms。我们还试图给您   灵活地使用所需的图案而无需太多烘烤   框架。因此,您应该能够在顶部实现MVVM模式   Blazor的核心概念

与Razor有何关系?

Razor是用于描述应如何以HTML呈现页面的全部或部分的语法,即可以用来描述应如何呈现Model View Controller中的View的语言。

因为客户端Blazor正在确定页面的呈现方式,所以我们需要一些可以用来描述页面的东西,这就是Razor出现的地方。Microsoft选择重用与服务器端相同的Razor语法/语言,面向Blazor的ASP.NET MVC,与使用ASP.NET并帮助将现有网站的某些部分迁移到Blazor的开发人员相比,这已经很熟悉了,而不是采用Handlebars语法。

“ Blazor应该是SPA的替代品”

关于此的一个注意事项:Blazor可用于构建单页应用程序,但不必那样使用。例如,我们使用Blazor将功能添加到现有的ASP.NET MVC站点中。在那种情况下,服务器呈现一个MVC页面,该页面具有该页面的Blazor功能的占位符。 Blazor具有良好的JS Interop功能,因此可以与现有页面愉快地共存。

答案 1 :(得分:0)

Blazor应用程序由Razor components组成。 Razor是Razor组件(以及Razor Pages和MVC视图)中使用的模板语法。在ASP.NET Core中,MVC框架包括Web API,这是您可能会用于Blazor应用程序的后端API框架。

在服务器端Blazor中,Blazor应用程序托管在Razor页面( _Host.cshtml )中。

Razor Pages是推荐用于服务器端HTML生成的框架。 ASP.NET Core团队有效地建议您以后仅将ASP.NET Core MVC用于API。