iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >ASP.NET Core中Razor页面与MVC区别有哪些
  • 844
分享到

ASP.NET Core中Razor页面与MVC区别有哪些

2023-06-29 06:06:00 844人浏览 独家记忆
摘要

这篇文章主要介绍“asp.net Core中Razor页面与mvc区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.net Core中Razor页面与MVC区别有哪

这篇文章主要介绍“asp.net Core中Razor页面与mvc区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.net Core中Razor页面与MVC区别有哪些”文章能帮助大家解决问题。

基础知识:什么是ASP.NET Razor页面?

Razor页面与ASP.NET MVC开发使用的视图组件非常相似,它们具有所有相同的语法和功能。

最关键的区别是模型和控制器代码也包含在Razor页面中。它更像是一个MVVM(Model-View-ViewModel)框架,它支持双向数据绑定,更简单的开发体验,具有独立的关注点。

下面是一个Razor页面最基本的示例,在@functions块中内嵌代码,不过推荐将PageModel代码放在一个单独的文件中。这更像是我们在ASP.NET WEBFORMs文件中编写代码的方式。

@page@model IndexModel@using Microsoft.Aspnetcore.Mvc.RazorPages@functions {    public class IndexModel : PageModel    {        public string Message { get; private set; } = "In page model: ";        public void OnGet()        {            Message += $" Server seconds  { DateTime.Now.Second.ToString() }";        }    }}<h3>In page sample</h3><p>    @Model.Message</p>

我们现在两个选择:ASP.NET MVVM 或 MVC

我们现在有两个选择,一个MVC,另一个是MVVM框架。我不打算介绍MVC vs MVVM的所有细节。在这篇文章中用一些例子很详细说明了这一点。MVVM框架最关注的是数据模型的双向绑定。

MVC适用于具有大量动态服务器视图、单页应用程序、REST apiajax调用的应用程序。Razor页面非常适用于只读或执行基本数据输入的简单页面。

MVC最近在大多数编程语言的Web应用程序中非常流行,但是它也有其利弊。ASP.NET WebForms被设计为一个MVVM解决方案,您可以认为Razor页面是WebForms的演变。

Razor页面的优点和缺点

根据我在使用新的Razor页面过程中,下面是我总结的利弊以及我是如何看待使用它们。

优点:更有条理

我不知道您,但是我第一次使用ASP.NET MVC,花了很多时间试图弄清楚它是如何工作的。命名规则和动态创建路由导致了很多我不习惯的规则。事实上,从路径“/Home/”到HomeController.Index(),它从“Views\Home\Index.cshtml”中加载一个视图文件,在刚开始使用时觉得很神奇。

Razor页面更有条理。您有一个Razor视图和后台代码文件,就像WebForms一样,不像与MVC对应的控制器、视图和模型存放在不同目录中具有单独的文件。

MVC项目和Razor页面项目比较(将在本文后面介绍更多的代码差异)。

ASP.NET Core中Razor页面与MVC区别有哪些

MVC与Razor页面文件比较

优点:单一责任

如果您以前曾经使用过MVC框架,您可能会看到一些巨大的控制器类,其中包含许多不同的Action。它们就像一种随着时间的推移而增加的病毒。

使用Razor页面,每个页面都是独立的,视图和代码组织在一起,这遵循单一责任原则。

使用Handlers实现多个GET、POST Action

默认情况下,Razor页面设计为具有单个OnGetAsyncOnPostAsync Action方法;如果您想在单个页面中具有不同的Action,则需要使用所谓的Handler。如您的页面有AJAX回调、多个表单提交或其它场景,则需要使用它。

例如,如果您使用Kendo Grid并希望通过AJAX调用加载Grid数据,则需要使用Handler来处理该AJAX调用。任何类型的单页面应用程序将使用大量Handler,或者您将所有这些AJAX调用指向MVC控制器。

我在页面中添加了一个名为OnGetHelloWorldAsync()的方法,我们该怎么调用它?

从我的研究来看, 调用Handler有三种不同的方式:

  • Querystring &ndash; 示例:“/managepage/2177/?handler=helloworld”

  • 为视图中的定义路由:@page"{handler?}",然后在Url中包括“/helloworld”

  • 在视图中定义提交按钮 - 示例:<input type="submit" asp-page-handler="JoinList" value="Join" />

可以在这里了解更多有关单页面多个Handlers 的方式。

为什么您应该使用Razor页面的!

Razor页面是网页应用程序中的完美解决方案,我可能提出一个争议。它一目了然,你的应用程序中的任何HTML“页面”都是真实的页面。目前,MVC Action 可以返回HTML视图、JSON、文件或任何内容。使用Razor页面将页面加载和AJAX回调的服务之间强制分离。

想想,这种强制分离解决了很多问题。

Razor PageMVC
HTML ViewsREST API calls, SOA

这将阻止MVC控制器包含大量的Action,MVC应用程序中的Action混合了不同的“页面”,而且还包含AJAX回调和其它功能。

当然,我还没有实际中使用这种开发方式,这可能是失败,也可能是成功的,只有时间才能告诉社区如何使用Razor页面。

ASP.NET Razor页面与MVC的代码比较

作为Razor页面的一部分,我在MVC和Razor页面中构建了一个非常简单Form表单。让我们来看看之间的代码。它只有一个文本框和提交按钮。

这是MVC视图:

@model RazorPageTest.Models.PageClass<form asp-action="ManagePage">    <div class="form-horizontal">        <h5>Client</h5>        <hr />        <div asp-validation-summary="ModelOnly" class="text-danger"></div>        <input type="hidden" asp-for="PageDataiD" />        <div class="form-group">            <label asp-for="Title" class="col-md-2 control-label"></label>            <div class="col-md-10">                <input asp-for="Title" class="form-control" />                <span asp-validation-for="Title" class="text-danger"></span>            </div>        </div>              <div class="form-group">            <div class="col-md-offset-2 col-md-10">                <input type="submit" value="Save" class="btn btn-default" />            </div>        </div>    </div></form>

这是MVC控制器(数据模型是PageClass,只有两个属性,很简单)。

    public class HomeController : Controller    {        public IConfiguration Configuration;        public HomeController(IConfiguration config)        {            Configuration = config;        }        public async Task<IActionResult> ManagePage(int id)        {            PageClass page;            using (var conn = new sqlConnection(Configuration.GetConnectionString("contentdb")))            {                await conn.OpenAsync();                var pages = await conn.QueryAsync<PageClass>("select * FROM PageData Where PageDataID = @p1", new { p1 = id });                page = pages.FirstOrDefault();            }            return View(page);        }        [HttpPost]        [ValidateAntiForgeryToken]        public async Task<IActionResult> ManagePage(int id, PageClass page)        {            if (ModelState.IsValid)            {                try                {                    //Save to the database                    using (var conn = new SqlConnection(Configuration.GetConnectionString("contentdb")))                    {                        await conn.OpenAsync();                        await conn.ExecuteAsync("UPDATE PageData SET Title = @Title WHERE PageDataID = @PageDataID", new { page.PageDataID, page.Title});                    }                }                catch (Exception)                {                   //log it                }                return RedirectToAction("Index", "Home");            }            return View(page);        }    }

现在我们来比较一下Razor页面。

Razor 页面:

    @page "{id:int}"    @model RazorPageTest2.Pages.ManagePageModel        <form asp-action="ManagePage">        <div class="form-horizontal">            <h5>Manage Page</h5>            <hr />            <div asp-validation-summary="ModelOnly" class="text-danger"></div>            <input type="hidden" asp-for="PageDataID" />            <div class="form-group">                <label asp-for="Title" class="col-md-2 control-label"></label>                <div class="col-md-10">                    <input asp-for="Title" class="form-control" />                    <span asp-validation-for="Title" class="text-danger"></span>                </div>            </div>                <div class="form-group">                <div class="col-md-offset-2 col-md-10">                    <input type="submit" value="Save" class="btn btn-default" />                </div>            </div>        </div>    </form>

这是Razor PageModel,也称之为后台代码:

    public class ManagePageModel : PageModel    {        public IConfiguration Configuration;        public ManagePageModel(IConfiguration config)        {            Configuration = config;        }        [BindProperty]        public int PageDataID { get; set; }        [BindProperty]        public string Title { get; set; }         public async Task<IActionResult> OnGetAsync(int id)        {            using (var conn = new SqlConnection(Configuration.GetConnectionString("contentdb")))            {                await conn.OpenAsync();                var pages = await conn.QueryAsync("select * FROM PageData Where PageDataID = @p1", new { p1 = id });                var page = pages.FirstOrDefault();                this.Title = page.Title;                this.PageDataID = page.PageDataID;            }            return Page();        }        public async Task<IActionResult> OnPostAsync(int id)        {            if (ModelState.IsValid)            {                try                {                    //Save to the database                    using (var conn = new SqlConnection(Configuration.GetConnectionString("contentdb")))                    {                        await conn.OpenAsync();                        await conn.ExecuteAsync("UPDATE PageData SET Title = @Title WHERE PageDataID = @PageDataID", new { PageDataID, Title });                    }                }                catch (Exception)                {                   //log it                }                return RedirectToPage("/");            }            return Page();        }    }

差异解密

两者之间的代码几乎相同,以下是主要的区别:

  • MVC视图代码部分完全相同,除了Razor页面顶上的@page

  • ManagePageModel具有OnGetAsyncOnPostAsync方法,取代了MVC控制器中两个“ManagePage” Action;

  • ManagePageModel包含之前单独在PageClass中的两个属性。

在MVC中HTTP POST请求,将对象传递给MVC的Action(例如ManagePage(int id,PageClass page));使用Razor页面,可以使用数据双向绑定。为了让Razor页面正确地使用双向数据绑定,我两个属性(PageDataIDTitle)使用了[BindProperty]标记。

关于“ASP.NET Core中Razor页面与MVC区别有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: ASP.NET Core中Razor页面与MVC区别有哪些

本文链接: https://www.lsjlt.com/news/323125.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core中Razor页面与MVC区别有哪些
    这篇文章主要介绍“ASP.NET Core中Razor页面与MVC区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET Core中Razor页面与MVC区别有哪...
    99+
    2023-06-29
  • ASP.NET Core中Razor页面与MVC区别介绍
    作为.NET Core 2.0发行版的一部分,还有一些ASP.NET的更新。其中之一是添加了一个新的Web框架来创建“页面”,而不需要复杂的ASP.NET M...
    99+
    2024-04-02
  • ASP.NET Core中的Razor页面介绍
    目录简介Why?创建Razor页面应用程序ASP.NET Core Razor页面 - 核心功能模型绑定HandlersTag Helpers and HTML Helpers路由总...
    99+
    2024-04-02
  • ASP.NET Core中的Razor页面怎么创建
    这篇文章主要介绍“ASP.NET Core中的Razor页面怎么创建”,在日常操作中,相信很多人在ASP.NET Core中的Razor页面怎么创建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-29
  • ASP.NET Core MVC中Required与BindRequired用法与区别介绍
    在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案。 元数据注释最典型例子是确保...
    99+
    2024-04-02
  • ASP.NET Core中Razor页面的Handlers处理方法详解
    简介 在前一篇文章中,我们讨论了Razor页面。今天我们来谈谈处理方法(Handlers)。 我们知道可以将代码和模型放在 .cshtml 文件里面或与 ...
    99+
    2024-04-02
  • flash与html5页面有哪些区别
    小编给大家分享一下flash与html5页面有哪些区别,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 区别:1、flash是一种用于动画创作与应用程序开发的软件...
    99+
    2024-04-02
  • ASP.net mvc面试题有哪些
    这篇文章主要讲解了“ASP.net mvc面试题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.net mvc面试题有哪些”吧!  第1题:什么是ASP.net mvc  这是一...
    99+
    2023-06-04
  • ASP.NET中 MVC与WebForm的区别是什么
    这篇文章给大家介绍ASP.NET中 MVC与WebForm的区别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ASP.NET MVC与WebForm区别谈使用ASP.NET MVC框架,创建默认项目,***直观感...
    99+
    2023-06-17
  • vue中mvvm和mvc的区别有哪些
    这篇文章主要讲解了“vue中mvvm和mvc的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中mvvm和mvc的区别有哪些”吧! ...
    99+
    2024-04-02
  • ASP.NET Core中的配置有哪些
    这篇文章主要讲解了“ASP.NET Core中的配置有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET Core中的配置有哪些”吧!背景AS...
    99+
    2024-04-02
  • react单页面和多页面的区别有哪些
    这篇“react单页面和多页面的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“r...
    99+
    2024-04-02
  • webapi和mvc的区别有哪些
    Web API 和 MVC 是两种不同的架构模式,它们有以下区别: 架构目的:MVC 是一种模式,用于创建基于 Web 的应用程...
    99+
    2023-10-26
    webapi mvc
  • sql中#与$有哪些区别
    这篇文章给大家分享的是有关sql中#与$有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在这里用到了#{},使用#时:1、用来传入参数,sq...
    99+
    2024-04-02
  • PHP7中的?与??有哪些区别
    这篇文章将为大家详细讲解有关PHP7中的?与??有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext P...
    99+
    2023-06-14
  • css中link与@import区别有哪些
    这篇文章给大家分享的是有关css中link与@import区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。css的全称是什么css的全称是Cascading Style Sheets(层叠样式表),它是一...
    99+
    2023-06-08
  • mysql中5.6与5.7有哪些区别
    今天小编给大家分享一下mysql中5.6与5.7有哪些区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2024-04-02
  • php中cookie与session有哪些区别
    这篇文章将为大家详细讲解有关php中cookie与session有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区别:1、Cookie存储在浏览器中,相对不安全;而session存储在服务器中,相...
    99+
    2023-06-21
  • php中const与static有哪些区别
    这篇文章主要介绍了php中const与static有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php中const与static的区别:1、const只能修饰类的属...
    99+
    2023-06-08
  • CSS中import与link有哪些区别
    今天小编给大家分享一下CSS中import与link有哪些区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作