设为首页 加入收藏

TOP

.net core mvc启动顺序以及主要部件4-MVC(一)
2019-09-17 17:14:08 】 浏览:30
Tags:.net core mvc 启动 顺序 以及 主要 部件 4-MVC

前面三章已经把MVC启动过程以及源代码做了讲解,本章开始正式MVC,mvc全称叫model view controller,也就是把表现层又细分三层,官网的图片描述:

 

默认创建了一个.net core web 项目,把Startup类中的代码改成下面这样

 public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
          
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, Microsoft.AspNetCore.Hosting.IHostingEnvironment environment)
        {
            if (environment.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseMvcWithDefaultRoute();
        }
    }

 我们.net core mvc是基于约定的一种模式,例如:控制器是放在Controllers文件夹中的(当然这不是必须),视图放在pages或者views文件夹中等,首先我们讲讲Controller的约定,先不管例外的情况,我们要定义一个Controller首先要继承至Microsoft.AspNetCore.Mvc.Controller类并且符合下面其中之一的条件:

1、这个类名称后缀是以Controller结尾

     例如:新建一个Home类,那么它的签名应该像这样:public class HomeController : Controller

2、继承至带有Controller后缀名的基类,

    例如:你已经创建好了一个BaseController基类,现在需要创建Home类,那么他的签名可以是这样:public class Home : BaseController

3、这个类带有[Controller]标签

     例如:新建一个Home类,那么它的签名应该像这样:

      [Controller]

      public class Home : Controller

在Controller类里面写的方法,我们称为Action,例如下面,这就创建了一个名为Index的方法, 返回值类型是一个实现了IActionResult接口的实例,这里返回的是View

  

 public class HomeController: Controller
    {
        
        public IActionResult Index()
        {
            return View();
        }
       
    }

在这里先说说View()这个方法到底干了什么事儿吧,我们转到源代码可以看到最终View是创建了一个ViewResult这个类,这个类又继承至ActionResult并且实现了IActionResult接口,其中最主要 ExecuteResultAsync方法就是返回给我们前端的数据,ViewResult这个类中有两个我们常用的属性,分别是ViewName和ViewData,分别代表"视图的名称"和"视图需要的数据",如果视图名称不传那么就约定以控制器Action名称为准,否则已传入名称为准,如果传入ViewData那么就可以在视图中的Model属性里面访问到传入的数据,并且转换为强类型,就以上面的例子,我们在Views文件夹中创建一个Home文件夹和Index.cshtml视图文件,并且在Models文件夹中创建两个实体,一个为通用的ViewModel,代码如下:

 public class ViewModel<T> where T : class
    {
        public string Title { get; set; }
        public IEnumerable<T> Data { get; set; }
    }

  另一个是具体的Action视图所需的数据实体,所以名称为IndexModel,具体代码如下:

public class IndexModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }

 另外我们再写一个获取Index数据的服务,名称为HomeService,并且在Startup类的ConfigureServices方法中最前面加上services.AddScoped<HomeService>();

先不管是否符合设计规范,这样做完后我们就可以在其他实体中注入HomeService的实例了,我们HomeService中代码可以是这样的:

 public class HomeService
    {
        private  IEnumerable<IndexModel> _sourceData = new List<IndexModel>
        {
            new IndexModel { Id = 1, Description = "my is code1", Name = "test1" },
             new IndexModel { Id = 2, Description = "my is code2", Name = "test2" },
              new IndexModel { Id = 3, Description = "my is code3", Name = "test3" },
               new IndexModel { Id = 4, Description = "my is code4", Name = "test4" },
                new IndexModel { Id = 5, Description = "my is code5", Name = "test5" },
        };
        public ViewModel<IndexModel> GetData(int id)
        {
            return new ViewModel<IndexModel>
            {
                Title = "Index",
                Data = id > 0 ? _sourceData.Where(x => x.Id == id) : _sourceData
            };
        }
    }

 这个时候将HomeController中的代码改成这样

 

 public class HomeController: Controller
    {
        private readonly HomeService _service;

        public HomeController(HomeService service)
        {
            _service = service;
        }

        public IActionRe
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇小白开学Asp.Net Core《三》 下一篇LinqToSQL4

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目