.Net Core学习笔记(二)MVC框架

MVC的依赖关系如下:

.Net Core学习笔记(二)MVC框架

一、添加默认MVC路由

注册MVC服务:

services.AddMvc();

在Configure方法中使用

app.UseMvcWithDefaultRoute();

二、常规的路由引用方式

MVC的路由分为两种:Conventional Routing(按约定映射)和Attributre Routing(按属性映射)

    Conventional Routing配置:

app.UseMvc(builder =>
            {
                //Home/Index/3
                builder.MapRoute("Default", "{Controller=Home}/{action=Index}/{id?}");
            });

使用builder构造器的Map类方法进行构造,IDE会自动队友到每个文件夹对应的路由文件(.cs文件)

public class HomeController
    {
        public string Index()
        {
            return "Hello from Index";
        }
    }

    Attributre Routing配置:

此方法无需在starup方法里进行配置,而需要在各个路由和队友的方法下配置属性来完成映射

app.UseMvc(builder =>
            {
                //Home/Index/3
                //builder.MapRoute("Default", "{Controller=Home}/{action=Index}/{id?}");
            });
[Route("about")]
    //[Route("V2/[Controller]/[action]")]//默认 版本/控制器/动作
    public class AboutController
    {
        [Route("")] //[Route("X")]
        public string Me()
        {
            return "ViperL1";
        }

        [Route("Company")]
        public string Company()
        {
            return "No Thing";
        }
    }

.Net Core学习笔记(二)MVC框架                                      .Net Core学习笔记(二)MVC框架

属性可以在类下做默认映射:[Route("V2/[Controller]/[action]")]//默认 版本/控制器/动作

或者对每个动作进行单独映射,这种映射方法下可以缺省一个动作到上一级目录访问

三、MVC Controller类的相关封装

相关引用为:

using Microsoft.AspNetCore.Mvc;
HomeController:Controller

        1.IActionResult类

        用于返回数值,可以返回字符串、HTML页面、文件等

        返回字符串

public IActionResult Index()
        {
            return this.Content("Hello from X");
        }

      返回对象:

public IActionResult Index()
        {
            var ObjStu = new Student
            {
                Name = "NMSL",
                ID = 1
            };
            return new ObjectResult(ObjStu);
        }

        对应的对象为:

public class Student
    {
        public string Name { get; set; }
        public int ID { get; set; }
    }

      返回View页面:

public IActionResult Index()
        {
            var ObjStu = new Student
            {
                Name = "NMSL",
                ID = 1
            };
            return View(ObjStu);
        }

      同时此方法需要建立对应的HTML View

      按照对应的路径建立HTML页面(映射路径)

.Net Core学习笔记(二)MVC框架        .Net Core学习笔记(二)MVC框架

      该页面可以是静态页面,也可以使用一个对象作为参数,但是需要在页面内解包

(@表示引用,其后面可以使用C#语句 Model是HTML默认的对象)

引用模型:

@model TestConfigure.Model.Student

进行映射:

<h1>@Model.ID @Model.Name</h1>

    2.将View页面和后台数据分离

        此方法可以日后用于从数据库获取数据

建立一个Services文件夹.Net Core学习笔记(二)MVC框架并在其中实现接口

public interface IRepository<T> where T:class
    {
        IEnumerable<T> GetAll();
    }
public class IMeroryRepository : IRepository<Student>
    {
        public IEnumerable<Student> GetAll()
        {
            return new List<Student>
            {
             new Student
            {
                Name = "777",
                ID = 1
            },
             new Student
            {
                Name = "EDG",
                ID = 2
            },
             new Student
            {
                Name = "4396",
                ID = 3
            }
            };
        }
    }

在starup中注册服务

services.AddScoped<IRepository<Student>, IMeroryRepository>();

在HomeController中进行注入

private readonly IRepository<Student> _repository;
public HomeController(IRepository<Student> repository)
{
   repository = repository;
}//注入服务


public IActionResult Index()
{
    var list = _repository.GetAll();
    return View(list);
}

在HTML界面中进行解包

@using TestConfigure.Model
@model IEnumerable<TestConfigure.Model.Student>
@*<h1>@Model.ID @Model.Name</h1>*@
    <ul>
        @foreach (var s in Model)
        {
            <li>@s.ID -- @s.Name</li>
        }
    </ul>

.Net Core学习笔记(二)MVC框架