• ASP.NET Core – MVC


    前言

    在 ASP.NET Core – MVC vs Razor Page 里有提到 MVC. 它算是 WebAPI 的抽象.

    但是通常 MVC 指的是比较传统的 Website, WebAPI 则是前后端分离的方案. Razor Page 则是替代 MVC 做 Website 的.

    虽然说替代, 但是也不是 100%, 有些场景用 MVC 会比较直观. 这篇就特别来讲一下.

    Get Started

    dotnet new mvc -o TestMvc

    folder 结构

    可以 1 Controller 多个 Action, 每一个 Action 对一个 View, 或者 1 Controller 1 Action 对 1 个 View (看想怎样管理)

    Controller 找 View

    找 View 是有 default path 逻辑的, 也可以自定义. 但这里我就不多介绍了. 因为我使用场景很少, 所以都是直接写 path.

    return View("~/PathToView/Index.cshtml", viewModel);

    职责

    Razor Page 的入口是 View .cshtml 然后引入 Model.cs (这个 Model 又包含了 Init 方法, 所以它算是 Model + Controller 概念)

    MVC 的入口是 Controller + Action (.cs) 然后通过 ViewModel passing 资料给 View.

    Razor Page View = MVC View

    Razor Page Model Init = MVC Controller Action

    Razor Page Model = MVC ViewModel

    Route

    上面讲了 Controller Action 和 View 的关系. 现在讲 Route.

    Razor Pages 是通过 View 里面的 @page "url" 来定义 route 的.

    MVC 则是直接在 Program.cs 里声明

    pattern 可以写一些表达式, 上面的意思是

    第一个 segment 对应 controller 名字,

    第二个对应 action 

    第三个是一个 optional 的 RouteData

    同时如果 3 个 segment 都是空, 那么就匹配 default 的 Home Index

    使用场景

    我遇到的场景是这样的

    有 services 和 products.

    一种做法是 /services, /categories 作为所以 services 和 product categories 页面

    然后 /services/service1, /category1/product1 作为 service/product detail 页面.

    但是这个项目不打算做 /services 和 product categories 页面.

    而是直接让用户去 /service1 或者 /category1 

    service1 和 category1 是来自 SQL 的 data. route 匹配的写法就是 /{service-or-category}

    然后 service 和 category 的页面是不同的设计. 

    这种情况下, 用 Razor Page 就不太合适了. 

    因为 same route 但是不同 View. 而 Razor Page 的特色是 1 个 View match 1 个 Route.

    所以这里就可以用 MVC 的方式, Route match 了进入 Controller, 然后判断是 service 还是 category 然后输入 service view 或者 category view.

    这个做法就比较直观了.

  • 相关阅读:
    linux目录结构介绍
    Linux下安装Redis
    SpringBoot启动器详解pom.xml
    Linux(CentOS6.X)安装mysql
    CentOS 7 安装 MySQL
    GIT和SVN的区别
    SourceTree安装教程
    Git版本控制软件结合GitHub从入门到精通常用命令学习手册
    WIN下Git GUI 教程
    把文件(项目)上传到Git@OSC
  • 原文地址:https://www.cnblogs.com/keatkeat/p/16614763.html
Copyright © 2020-2023  润新知