由于之前在项目中也使用MVC进行开发,但是具体是那个版本就不是很清楚了,但是我觉得大体的思想是相同的,只是版本高的在版本低的基础上增加了一些更加方便操作的东西。下面是我学习ASP.NET MVC5高级编程(5)的一些知识笔记,有些简单的操作没有进行记录,一些知识点就使用思维导图来写出大体的知识架构。

MVC5是完全Bin部署的,也就是说我们最后发布的时候只是将Bin文件下面的应用程序的程序集发布就可以,对于服务器来说只需要有.NET 4.5就可以进行安装了。

一条至理名言“约定优于配置”

这是在使用MVC时经常听到的话,之前不懂是什么意思,现在随着编码次数的增多,对于这句话也有了自己的理解,大体的意思就是说按照人家的之前的约定,不要随意调整项目中的目录,结构。也对现在整个MVC项目的架构都搭建好了,如果说需要调整那么可能是一个大的工程,我们需要对整个底层使用到的相关地方都需要做更改。现在的整个结构有一个理念是“使应用程序的关注点分离,让开发人员更加方便的开发。”

MVC提供的是方法调用的结果,不是动态生成页面(脚本)。

在Web中使用MVC时,应用MVC模式要求Web应用程序中的每一个用户输入只采用请求的方式,在实际的开发中,每个请求都被路由到控制器的一个方法上进行操作,该控制器全权负责解释这些请求,有可能会操作模型,然后选择一个视图反馈给用户。

MVC5中控制器和视图之间值得传递

关于值的传递我们知道有ViewBag,ViewData,ViewDataDictionary,模型(强类型)等形式进行传递,

其实值都是通过ViewDataDictionary来传递的,数据从控制器传送到视图是通过一个名为ViewData的ViewDataDictionary(一个字典类),还有就是ViewBag是ViewData的动态封装器;

动态值不能作为一个参数传递给扩展方法,因为C#编译器为了选择正确的扩展方法,在编译时必须知道每个参数的真正类型。

使用强类型模型对象,必须使所有的数据都是强类型数据,以便在视图中可以使用智能感知。

若是一般的类,在视图中需要使用IEnumerable<>来指定,

     @model IEnumerable<RegisterExternalLoginModel>

要是控制器传递过来的数据本身就是IEnumerable或者其继承它的类型,那么就只需要写

     @model RegisterExternalLoginModel

就可以出现了。

至于说ViewData[“”]和ViewBag.;使用方法简单,但是建议大家少使用, 尤其是在一些大的项目里面,我们完全可以将数据封装到模型中,这样通过模型在控制器和视图之间进行数据的传递。

@Razor视图中的重要知识点

  1. :通过”@”来在视图中写C#代码,同时编译器也会将其看待为后台语言进行编译,运行。
  2. :可以通过( )来区分一些常见的二义性。
  3. :@@两个转义为一个@符号;
  4. :可以使用@{ }来区分代码块;
  5. :@Html.Raw():按照HTML格式来进行编码输出;
  6. :@Html.RenderPartial(“Indx”);此区域放置局部视图,不经过控制器,可以往其传递model,这样局部视图中的model就是我们传递的;还有就是局部视图不能指定布局。只能说像之前的那样嵌套进去。
  7. :@Hmtl.RenderAction();这个和上面是有区别的,是需要经过控制器处理的;
  8. :@*   注释*@,此视图中的注释写法;
  9. :调用泛型方法<>需要注意,可以使用@()来区分。
  10. :@Html.RenderBody(),这个是在布局中定义的,最后是在此处嵌套网页。
  11. :@Html.RenderSection(“Footer”);设置其下面的节,可以在其网页中显示出来这个节。
  12. :@Html.DisplayFor();视图的输出采用HTML辅助方法。
  13. :@Html.DropDownList();下拉列表.这里设置的是selectList();
        <div id="body">
@RenderSection("featured", required: false)
<section class="content-wrapper main-content clear-fix">
@RenderBody()
</section>
</div>

@section featured {
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>@ViewBag.Message</h2>
</hgroup>
<p>
To learn more about ASP.NET MVC visit
<a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
The page features <mark>videos, tutorials, and samples</mark> to help you get the most from ASP.NET MVC.
If you have any questions about ASP.NET MVC visit
<a href="http://forums.asp.net/1146.aspx/1?MVC" title="ASP.NET MVC Forum">our forums</a>.
</p>
</div>
</section>
}

这个自己定义的节点,取代我们在布局视图中的@Html.RenderSection();@section语法为布局中定义的一个节点指定了内容。

如果想展示HTML标签,就返回一个System.Web.IHtmlString对象的实例。

对于复杂的应用程序,我们想探讨不同的架构和设计模式来满足我们的需求,领域驱动设计(DDD)是一种团队使用的方法,可用来处理复杂的应用程序,命令查询职责分离(CQRS)也是一种团队开发模式,它在复杂的应用程序开发中占据主要的份额。

查询数据时Include()的介绍

        public ActionResult Edites()
{
var albums = db.albums.Include(a => a.Article).Include(a=>a.Genre);
return View(albums.ToList());
}

就比如说是上面的那样,这个Include,从数据库取出的数据采用的是预加载策略,这个就是说尽其所能地使用查询语句加载所有数据。还有一种是延迟加载,这个EF在Linq查询中只加载主要对象数据,而不是去填充我们的设置的对象。这个由一个弊端,就是每次需要多加载一个,这个就是说我们在声明类对象的时候需要前面添加Virtual标记,

这里的Include方法可以看成减少在构建完整模型中需要的查询数据的一个优化。

模型绑定

之前只是知道在形参中传递模型(类),我们不需要管数据是如何过来的,底层的架构已经帮我们封装好了,但是现在看书才发现之前了解的都有皮毛,没有一点知识点。这个在验证模型绑定之前有一个模型的验证,ModelState.IsValid()通过这个来完成服务端的验证,这个之前还有一个通过模型绑定器的东西。([Bind(Include=”类中的属性”,)]);

UpdataModel();TryUpdateModel();这两个也是模型绑定验证的,在前面。第二个返回一个布尔类型的值。

ASP.NET MVC5学习笔记01的更多相关文章

  1. ASP.NET MVC5学习笔记之Filter提供体系

    前面我们介绍了Filter的基本使用,但各种Filter要在合适的时机运行起来,需要预先准备好,现在看看ASP.NET MVC框架是怎么做的. 一.Filter集合 在ControlerActionI ...

  2. ASP.NET MVC5学习笔记之Controller同步执行架构分析

    在开始之前,声明一下,由于ASP.NET MVC5正式发布了,后面的分析将基于ASP.NET MVC5最新的源代码.在前面的内容我们分析了怎样根据路由信息来确定Controller的类型,并最终生成C ...

  3. ASP.NET MVC5 学习笔记-1 控制器、路由、返回类型、选择器、过滤器

    [TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序,选择MVC,选择添加测试. 在解决方案上右键,选择"管理NuGet程序包& ...

  4. ASP.NET MVC5学习笔记之Filter基本介绍

    Filter是ASP.NET MVC框架提供的基于AOP(面向方面)设计,提供在Action执行前后做一些非业务逻辑通用处理,如用户验证,缓存等.现在来看看Filter相关的一些类型信息. 一.基本类 ...

  5. ASP.NET MVC5 学习笔记-2 Razor

    1. Razor @*注释*@ 你在用 @Request.Browser.Browser, 发送邮件给support@qq.com, 转义@@qq @{ var amounts = new List& ...

  6. ASP.NET MVC5学习笔记之Action参数模型绑定之模型元数据和元数据提供

    一. 元数据描述类型ModelMetadata 模型元数据是对Model的描述信息,在ASP.NET MVC框架中有非常重要的作用,在模型绑定,模型验证,模型呈现等许多地方都有它的身影.描述Model ...

  7. ASP.NET MVC5学习笔记之Action参数模型绑定基本过程

    当我们在Controller中定义一个Action,通常会定义一个或多个参数,每个参数称为一个模型,ASP.NET MVC框架提供了一种机制称为模型绑定,会尝试自动从请求的信息中实例化每一个模型并赋值 ...

  8. ASP.NET MVC5 学习笔记-4 OWIN和Katana

    1. Owin OWIN全名:Open Web Interface for .NET. 它是一个说明,而非一个框架,该声明用来实现Web服务器和框架的松耦合.它提供了模块化.轻量级和便携的设计.类似N ...

  9. ASP.NET MVC5 学习笔记-3 Model

    1. Model 1.1 添加一个模型 注意,添加属性时可以输入"prop",会自动输入代码段. public class CheckoutAccount { public int ...

随机推荐

  1. C# 条形码操作【源码下载】

    本篇介绍通过C#生成和读取一维码.二维码的操作. 目录 1. 介绍:介绍条形码.条形码的分类以及ZXing.Net类库. 2. 一维码操作:包含对一维码的生成.读取操作. 3. 二维码操作:包含对二维 ...

  2. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  3. JavaScript动画-磁性吸附

    ▓▓▓▓▓▓ 大致介绍 磁性吸附是以模拟拖拽为基础添加一个拖拽时范围的限定而来的一个效果,如果对模拟拖拽有疑问的同学请移步模拟拖拽. 源代码.效果:点这里 ▓▓▓▓▓▓ 范围限定(可视区) 先来看一个 ...

  4. Hawk 4.6 并行化

    并行化 Hawk支持单机并行化,也就是使用多线程获取数据.它可以控制目前所有任务的数量,为了不给网站造成过大的压力,仅当任务池中的任务数量小于一定值后,才会插入新的任务. 你可以在数据清洗的 执行面板 ...

  5. 【热门技术】EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~

    一.写在前面 还在为时间接收而烦恼吗?还在为各种组件间的消息传递烦恼吗?EventBus 3.0,专注于android的发布.订阅事件总线,让各组件间的消息传递更简单!完美替代Intent,Handl ...

  6. WebApi返回Json格式字符串

    WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...

  7. App 审核由于 IPv6 网络问题被拒

    昨天 提交App Store 的时候被拒了 We discovered one or more bugs in your app when reviewed on iPhone running iOS ...

  8. Linux设备管理(二)_从cdev_add说起

    我在Linux字符设备驱动框架一文中已经简单的介绍了字符设备驱动的基本的编程框架,这里我们来探讨一下Linux内核(以4.8.5内核为例)是怎么管理字符设备的,即当我们获得了设备号,分配了cdev结构 ...

  9. grunt配置任务

    这个指南解释了如何使用 Gruntfile 来为你的项目配置task.如果你还不知道 Gruntfile 是什么,请先阅读 快速入门 指南并看看这个Gruntfile 实例. Grunt配置 Grun ...

  10. Hadoop2.2.0安装过程记录

    1    安装环境1.1    客户端1.2    服务端1.3    安装准备    2    操作系统安装2.1.1    BIOS打开虚拟化支持2.1.2    关闭防火墙2.1.3    安装 ...