作为开发者, 永远不能停下学习的脚步..net core mvc 似乎跟. net mvc 在使用层面上有一些相同, 我本着在学习. net core mvc 的同时也复习一下. net mvc 的心态, 打算从头学习. net core mvc, 以下是我学习过程中的学习笔记, 好记性不如烂键盘.
一, 数据绑定特性
这几个特性通常用于接口接收参数的约束, 特性写在参数前:
- public class HomeController : Controller
- {
- public IActionResult Index([FromBody] int id,string name)
- {
- return View();
- }
- }
- 1.FromHeaderAttribute:
用于绑定数据源为请求头的数据, 如果没有指定该特性, 控制器方法不会默认接收请求头数据
2.FromQueryAttribute:
用于绑定数据源为查询字符串, 如果有多个数据源返回同一个 key 值的数据, 则优先使用查询字符串的数据
3.FromFormAttribute:
用于绑定数据源为表单数据, 如果有多个数据源返回同一个 key 值的数据, 则优先使用表单数据
4.FromRouteAttribute:
用于绑定数据源在 URL 地址里对应路由的数据,
如: 路由为 API/{name}/{id}, 当 url 地址为 API/zhangsan/5, 则控制器对应方法能 name 参数能接收到 "zhangsan",id 参数能接收到 "5"
5.FromBodyAttribute:
用于绑定数据源在请求体的数据, 此特性不能用于 Get 请求, 仅用于 PUT,POST 和 Delete 请求
二, 控制器常用返回方法
1. 我们知道. net core mvc 控制器方法返回的类型是 IActionResult 接口, 但该接口有几个比较常用的实现类:
(1)JsonResult: 返回 JSON 结构数据
(2)RedirectResult: 跳转到新地址
(3)FileResult: 返回文件
(4)ViewResult: 返回视图页面
(5)ContentResult: 文本内容
2. 由于控制器类是继承于 Controller 的, 所以也可以直接使用封装在 Controller 里的方法来进行返回 IActionResult 的实现类, 对应于上面实现类的方法封装:
- (1)JSON(Object)
- (2)Redirect(Url)
- (3)File()
- (4)View()
- (5)Content()
三, 布局页与分布视图
1. 布局页
(1)在子页出现在布局页的位置写上:@renderbody(), 表示此处需要输出子页面内容, 在子页面中使用 Layout 属性指定布局页
(2)如果需要布局页的某些模块对子页进行分割, 则可以使用:@rendersection, 使用方法: 挖坑 @rendersection("名称 1"), 填坑 @section 名称 1{ ... }
(3)布局页不能独立使用
2. 分布视图
(1)把重复的视图 (html 片段) 抽离出来, 封装成部分视图, 供其他视图调用, 减少工作量, 便于维护
(2)可以通过 HTML.RenderPartial(viewPath)来调用分布视图
(3)也可以通过 HTML.RenderAction(路由地址, 参数)来调用分布视图
(4)分布视图常用于 Ajax 请求, 返回 HTML 片段
四, 控制器, 视图的数据传递
1.ViewDate
(1)键值对, 用法: ViewData[key]=value
(2)仅用于当前控制器与对应视图, 不可跨视图
2.ViewBag
(1)键值对, 用法: ViewBag.key=value
(2)ViewBag 是 ViewDate 的封装, 所以也仅用于当前控制器与对应视图, 不跨视图
(3)ViewBag.key1 等价于 ViewData["key1"], 如果之前对 ViewData["key1"]赋值, 之后对 ViewBag.key1 赋值, 则会覆盖 ViewData["key1"]
3.TempData
(1)键值对, 用法: TempData[key]=value, 跟 ViewDate 差不多
(2)视图级别, 可跨视图
(3)赋值后只能使用一次赋值后的值, 使用完后就消失, 但可多次赋值达到复用效果
4.Session
(1)键值对, 会话级别, 在服务端保存
(2)不支持根据索引器获取或设置 session
(3)用法:
a. 在 Startup 的 ConfigureServices 方法里写上 services.AddSession(), 启用 Session
b. 在 Startup 的 Configure 方法里写上 App.UseSession()
c.HttpContext.Session 获取 session 对象
d. 对 session 对象进行储存或获取数据
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddSession();
- services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
- }
- // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder App, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- App.UseDeveloperExceptionPage();
- }
- else
- {
- App.UseHsts();
- }
- App.UseSession();
- App.UseHttpsRedirection();
- App.UseMvc();
- }
- public class HomeController : Controller
- {
- public IActionResult Index(int id, string name)
- {
- ISession session = HttpContext.Session;// 获取 session 对象
- // 储存数据的三种方法
- session.Set("key1", new byte[1]);
- session.SetInt32("key2", 1);
- session.SetString("key3", "value");
- return View();
- }
- public IActionResult About()
- {
- ISession session = HttpContext.Session;// 获取 session 对象
- // 获取数据
- byte[] byteArr = session.Get("key1");
- int? intValue = session.GetInt32("key2");
- string stringValue = session.GetString("key3");
- return View();
- }
- }
- 5.Cache
(1)键值对, 应用程序级别, 在服务端保存
(2)与. net framework 的不同, 一种全新的实现, 继承 IMemoryCache 接口, 通过 Get/Set 方法来储存或获取数据
(3)运用依赖注入的方式获取 Cache 对象
(4)使用方法:
- public class HomeController : Controller
- {
- private readonly IMemoryCache _cache;
- public HomeController(IMemoryCache cache)
- {
- // 依赖注入
- _cache = cache;
- }
- public IActionResult Index(int id, string name)
- {
- // 储存数据
- _cache.Set("key1", 1);
- // 删除数据
- // _cache.Remove("key1");
- return View();
- }
- public IActionResult About()
- {
- // 获取数据
- int intValue= (int)_cache.Get("key1");
- return View();
- }
- }
五, 视图的全局设置
1.ViewStart
(1)在每个视图呈现之前都会执行的一个视图
(2)必须以_ViewStart.cshtml 命名, 必须放在视图所在目录的根目录下(即: Views 目录下), 会自动执行
(3)在此视图可做一些通用的设置, 如: 可用于母版页声明等
2.ViewImport
(1)必须以_ViewImport.cshtml 命名, 必须放在视图所在目录的根目录下(即: Views 目录下), 会自动执行
(2)可以使用 @using 关键字引入所需命名空间做全局性的命名空间引入, 减少在每个页面中引入的工作量
来源: http://www.bubuko.com/infodetail-2824953.html