Asp.net mvc Asp.net core blazor与带razor的.net core mvc

Asp.net mvc Asp.net core blazor与带razor的.net core mvc,asp.net-mvc,asp.net-core,razor,blazor,Asp.net Mvc,Asp.net Core,Razor,Blazor,使用razor和blazor在架构上有什么不同 文档建议我在使用blazor时必须编写一个Web Api—是否仍可以像在传统razor中那样传递模型对象?1。什么是传统的多页面网站或应用程序? 首先,您需要对传统网站/应用程序的工作原理有一个基本的了解:对于每个呼叫/请求,您都会向服务器发送一个请求,服务器会用整个页面的完整HTML进行响应。这可以像ASP.NET核心MVC或Razor页面一样动态生成,但只能生成一次。假设您有一个显示预览的文章列表。当用户点击read all时,在传统应用程序中

使用razor和blazor在架构上有什么不同


文档建议我在使用blazor时必须编写一个Web Api—是否仍可以像在传统razor中那样传递模型对象?

1。什么是传统的多页面网站或应用程序? 首先,您需要对传统网站/应用程序的工作原理有一个基本的了解:对于每个呼叫/请求,您都会向服务器发送一个请求,服务器会用整个页面的完整HTML进行响应。这可以像ASP.NET核心MVC或Razor页面一样动态生成,但只能生成一次。假设您有一个显示预览的文章列表。当用户点击read all时,在传统应用程序中通常有两种方式:

  • 加载一个类似于/view article?id=123的页面,其中再次出现上述情况(加载整个HTML DOM)
  • 使用JavaScript发出Ajax请求,从/API/get article?id=1234这样的API加载所需内容,并操纵DOM以在所需位置显示它
  • 没有JavaScript,传统网站就无法交互。大多数情况下,您会更喜欢第二种方法,因为它速度更快并且节省资源:您不需要再次呈现整个页面(其中只有部分页面发生了更改),而是停留在该页面上,只需重新加载所需的信息(本例中的文章内容)

    如果您希望传统页面具有交互性,则需要JavaScript。例如,您可以向某个API添加一个ajax调用,当用户单击按钮时显示一些数据,而无需重新加载整个页面简而言之,我们可以说,大部分工作都发生在服务器端。

    2.与单页应用程序(SPA)的区别在哪里? 就完整呈现的html页面而言,SPA只有一个页面。若你们像点击文章一样在那个里导航,他们会加载一个JavaScript应用程序。它处理那里的一切。如果用户单击一篇文章,则不会从服务器获取完整的HTML文档!相反,它只获取被更改的部分,在本例中是文章。其他一切(如导航栏、页脚、小部件等)将保留在多页应用程序中,如果不使用js/ajax,则可能会重新加载

    这里通常有模块化组件和双向数据绑定。这意味着,变量链接到某个HTML元素。变量更改时,元素将自动显示新值。在传统应用程序中,您必须手动创建事件处理程序来处理此问题

    对于用户来说,SPA通常比在多页应用程序中浏览页面快得多简而言之,我们可以说,大部分工作都发生在用户浏览器的客户端。服务器只提供静态内容(html、js、css),并提供API,例如从数据库获取条目或保存条目。

    3.布拉佐和那有什么关系? Blazor应用程序实际上是一个水疗中心。但与其他框架的主要区别在于,Blazor允许您使用C#代码控制客户端和服务器端。为了展示这一优势,让我们看看其他SPA框架,如Angular:您可以使用ASP.NET核心构建Angular SPA。在本例中,您使用TypeScript以角度编写客户端。如果您需要访问数据,它将对ASP.NET核心服务器(即C#)进行API调用

    这使得在这两者之间共享数据变得困难:如果您有一个文章模型,那么它需要在服务器上用C#定义,在客户端也用TypeScript定义。使用Blazor,您只需在C#中定义一次,然后在两个站点上重复使用它。换句话说:您只需编写C#,而不必关心JavaScript*

    这是它背后的基本思想。但只有在使用Blazor组件时才会出现这种情况。如果您需要一些尚未移植到Blazor的库,您仍然需要处理一些JS,但仍然可以从数据绑定之类的东西中获益

    3.1 Blazor WebAssembly和Blazor服务器 现在您了解了基本知识,需要在两种口味之间做出选择:

    Blazor WebAssembly

    顾名思义,它基本上用于直接在浏览器中运行C#浏览器。这需要一个新的解决方案。还有铬合金或Safari等主要发动机

    假设您有一个按钮,其中C代码作为处理程序,如下所示:

     <button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
    
    点击我
    
    IncrementCount
    是一种C#方法。代码被传输到客户端,并将在浏览器中执行。将其想象为浏览器内部的.NET核心运行时,就像Silverlight一样,但没有任何外部插件。甚至不需要在服务器端使用ASP.NET内核!它可以从任何Web服务器提供服务,只要您不需要服务器端的DBs之类的东西。这使得应用程序更大(并且更慢,至少在第一次加载时),但它可以脱机使用(至少在没有API调用的主逻辑中)。出于这个原因,它有时被称为真正的温泉。调试在这里可能比较困难,目前它只支持基于Chromium的浏览器

    Blazor服务器

    该应用程序在服务器上运行,只需使用SignalR Websockets将输出(如单击事件的结果,增加另一个HTML元素中的某些计数器)传输到浏览器。这使得应用程序更小更快,但需要更多的服务器端资源,因为你有一个signar连接,而且它是DOM,这使得它更难在大型设置中扩展

    另一方面,这降低了对客户端的要求:客户端不需要支持WASM,因此它可以在较旧的浏览器或支持受限WASM的浏览器以及低端设备上运行。但由于每个操作都以信号器调用结束,因此应用程序无法脱机工作-如果这是一项要求,请选择Blazor WebAssembly而不是Blazor Server

    选择什么?

    如上所述,这取决于你的需要。例如,如果您需要脱机支持,Blazor服务器