博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Core 2 学习笔记(六)MVC
阅读量:6088 次
发布时间:2019-06-20

本文共 3009 字,大约阅读时间需要 10 分钟。

原文:

 ASP.NET Core MVC跟ASP.NET MVC观念是一致的,使用上也没有什么太大的变化。之前的ASP.NET MVC把MVC及Web API的套件分开,但在ASP.NET Core中MVC及Web API用的套件是相同的。

本篇将介绍ASP.NET Core MVC设置方式。

MVC 简介

ASP.NET Core的MVC(Model-View-Controller)架构模式延续ASP.NET MVC,把网站分成三大元件ModelViewController,依赖关系如下图:

  • Model
    负责数据处理,包含数据存取、业务逻辑、定义数据对象及验证数据。
  • View
    负责UI显示,如HTML、CSS等界面设计配置。
  • Controller
    负责将使用者Requset找到相对应的Model及View,做为控制流程的角色。

在ASP.NET Core中使用MVC或Web API,需要Microsoft.AspNetCore.Mvc套件。

注册MVC 服务

Startup.csConfigureServices加入MVC的服务,并在ConfigureIApplicationBuilder使用UseMvcWithDefaultRoute方法注册MVC预设路由的Middleware。如下:

Startup.cs

// ...public class Startup{    public void ConfigureServices(IServiceCollection services)    {        services.AddMvc();    }    public void Configure(IApplicationBuilder app)    {        app.UseMvcWithDefaultRoute();    }}
  • UseMvcWithDefaultRoute

这个是ASP.NET Core的预设路由,会将Request来的URL找到对应的Controller及Action。

 

MVC 示例

Model

建立一个简单的Model 用于Controller 跟View 互动。

Models\UserModel.cs

namespace MyWebsite.Models{    public class UserModel    {        // 名称        public string Name { get; set; } = "SnailDev";    }}

 

Controller

在项目目录下建立一个Controllers文件夹,把Controller都放这个目录。

过去ASP.NET把MVC及Web API用的Controller分为ControllerApiController,现在ASP.NET Core把两者合一,不再区分ApiController
所以要建立一个类,名称后缀Controller即可,如下:

Controllers\HomeController.cs

namespace MyWebsite.Controllers{    public class HomeController    {        public string Index()        {            return "this is homecontroller index action";        }    }}

但要让Controller跟View互动,还是需要继承Controller比较方便,如下:

Controllers\HomeController.cs

using Microsoft.AspNetCore.Mvc;using MyWebsite.Models;namespace MyWebsite.Controllers{    public class HomeController : Controller    {        public IActionResult Index()        {            var user = new UserModel();            return View(model: user);        }    }}

IActionResult回传的方式可以有很多种,通过继承Controller后,就可以使用Controller的方法:

  • View
    以上例来说,通过回传View方法,可以找到该Controller & Action对应的*.cshtml,并且把UserModel传给View使用。
  • HTTP Status Code
    响应包含HTTP Status。常用的响应有OkBadRequestNotFound等。
    例如:return BadRequest("Internal Server Error"),会响应HTTP Status 400及Internal Server Error字串。
  • Redirect
    可以把Request转给其他的Action或URL。转向的方法有RedirectLocalRedirectRedirectToActionRedirectToRoute等。
    例如:return RedirectToAction("Login", "Authentication"),就会把Request转向到AuthenticationController的Login()。
  • Formatted Response
    响应时指定Content-Type。Web API的回传通常都用这种方式,序列化对象顺便标注Content-Type。
    例如:return Json(user),会将对象序列化成JSON字串,并在HTTP Headers带上Content-Type=application/json

 

View

View跟Controller有相互的对应关系,预设在Controller使用View方法回传结果,会从以下目录寻找对应的*.cshtml

  1. Views\{ControllerName}\{ActionName}.cshtml
    寻找与Controller同名的子目录,再找到与Action同名的*.cshtml
    如上例HomeController.Index(),就会找项目目录下的Views\Home\Index.cshtml文件。
  2. Views\Shared\{ActionName}.cshtml
    如果Controller同名的子目录,找不到Action同名的*.cshtml。就会到Shared目录找。如上例HomeController.Index(),就会找项目目录下的Views\Shared\Index.cshtml文件

Views\Home\Index.cshtml

@model MyWebsite.Models.UserModelHello~ 我是 @Model.Name

*.cshtml@model绑定Model的型别,才可以使用@Model取得Controller传入的对象。

示例结果

 

数据流动图如下:

参考

 

老司机发车啦:

转载地址:http://pevwa.baihongyu.com/

你可能感兴趣的文章
葡萄城SpreadJS表格控件荣获“2018年度优秀软件产品”称号
查看>>
Shell脚本中的自定义函数
查看>>
跨交换机实现VLAN
查看>>
linux下SSH远程连接服务慢解决方案
查看>>
分布式配置管理平台-disconf部署
查看>>
supesite首页模板标签调用
查看>>
使用cronolog 分割Tomcat日志
查看>>
Oracle正则表达式(一)
查看>>
linux服务安装 -- web服务(Apache)
查看>>
ipython安装
查看>>
裸磁盘映射(RDM)搭建MSCS群集
查看>>
虚拟机服务器资源分配
查看>>
kubernetes-1.11.0集群部署之etcd集群 (一)
查看>>
使用 RMAN 备份Oracle数据库
查看>>
一个简单python爬虫的实现——爬取电影信息
查看>>
MOSA4600 PLUS ,VST3300系列三方通话实现方法
查看>>
学习密码学必须知道的52个问题(1)
查看>>
我的友情链接
查看>>
网络管理必不可少皆因***无孔不入
查看>>
IT人如何实现有效沟通
查看>>