.Net Core学习笔记(二)MVC框架
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";
}
}
属性可以在类下做默认映射:[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页面(映射路径)
该页面可以是静态页面,也可以使用一个对象作为参数,但是需要在页面内解包
(@表示引用,其后面可以使用C#语句 Model是HTML默认的对象)
引用模型:
@model TestConfigure.Model.Student
进行映射:
<h1>@Model.ID @Model.Name</h1>
2.将View页面和后台数据分离
此方法可以日后用于从数据库获取数据
建立一个Services文件夹并在其中实现接口
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>