学习总结(ASP.NET MVC 5)
1. 无论什么时候,如果要写一个新的 MVC 的程序(网站),打开VS之后第一步永远都是“创建新的 ASP.NET MVC 项目”
(“新建项目”—→“Web(Visual C#)”—→“ASP.NET Web 应用程序”)
选择“空模板”选项,并在“添加文件夹和核心引用”部分勾选“MVC”复选框
2. 一个设计良好的 MVC 应用程序,必须从设计良好的模型开始,它是随后添加控制器和视图的焦点。
3. 模型是定义应用程序主题的现实对象、过程以及规则的表示,称为域。
4. 模型,通常称为域模型,包含应用程序域中要建立的 C#对象,称为域对象。这些域对象构成了应用程序的全部事物以及操纵这些对象的方法。
5. 在 MVC 体系架构中,输入请求是由控制器(Controller)(继承于 “Syster.Web.Mvc.Controller” 的 C# 类)来处理的
6. 控制器中的每一个 public 方法(“类”,当然要有方法)都称为是一个动作方法——可以用某个 URL 通过 Web 来调用它执行一个动作
7. 为了产生一个对浏览器的请求进行响应的 HTML,需要创建一个视图(View)
8. 当从一个动作方法返回一个 ViewResult 对象时,便是在指示 MVC 去渲染一个视图。(调用不带参数的View 方法是在告诉 MVC,去渲染该动作的默认视图)
9. Razor 引擎处理视图内容并生成发送给浏览器的 HTML
10. 除了字符串和 ViewResult 对象之外,也可以从动作方法返回其他结果。例如,如果返回一个RedirectResult,浏览器将被重定向到另一个 URL。这些对象统称为动作结果,它们都派生于ActionResult 类。
11. Web 应用程序平台的关键是构造并显示动态输出(在 MVC 中,控制器的工作是构造一些数据,并将其传递给视图,而视图则负责把它渲染成 HTML)
12. Web 页面从服务器到浏览器的整个呈现过程实际上分为三步:第一步是通过视图引擎对视图文件进行解释,将视图文件中的代码转换成 HTML 标记,这一步叫做渲染;
13. 渲染是把页面的非 HTML 代码转换成 HTML 标记,这一步工作是由服务器完成的
14. 将数据从控制器传递给视图的一种方式是使用 ViewBag(视图包)对象,它是 Controller 基类的一个成员
15. ViewBag 是一种动态对象,可以给它赋任意属性,这些属性的值可以在随后渲染的视图中使用
16. 当对 ViewBag 的属性(如:ViewBag.Greeting)进行赋值时,便是为视图提供数据。如: ViewBag.Greeting = hour < 12 ? "Good Morning" : "Good Afternoon";
17. 对属性名称 Greeting 没有特别要求,用任意属性名来代替,照样会正常工作,只要在控制器中使用的名称与视图中使用的名称相匹配即可。当然,通过对多个属性赋值,可以将多个属性值从控制器传递到视图。
18. 在视图中再次查阅 ViewBag.Greeting 属性,便可获得其数据值。如:<div> @ViewBag.Greeting World ( from the view ) </div>
19. 当在控制器的动作方法(如:Index 方法)中调用 View 方法时,MVC 框架会定位到对应的视图文件(如: Index.cshtml )并要求 Razor 视图引擎解析该文件的内容——Razor 会寻找视图文件中的 Razor 表达式,并处理它们。(在这个例子中,处理该表达式意味着在视图中插入作者在动作方法中赋给 ViewBag.Greeting 属性的值——这就是前面所提到的视图渲染过程)
20.通过“@Html.ActionLink”(如:@Html.ActionLink("现在回复", "RsvpForm") )可以在视图中添加一个指向动作方法的链接(这里指向的动作方法是 RsvpForm)。这个 ActionLink 方法有两个参数:第一个是该链接的显示文本,第二个是用户单击该链接时将要执行的动作
21. Html.ActionLink 是一个 HTML 的辅助器方法 —— MVC 框架附带了一组内置的辅助器方法,它们可以方便地用来渲染 HTML 的链接、文本输入框、复选框 以及其他种类的内容。
22. 与传统的 ASP.NET 应用程序不同,MVC 的 URL 并不对应物理文件。每个动作方法有它自己的 URL,而 MVC 使用 ASP.NET 的路由系统将这些 URL 转换成动作。
23. 强类型视图意在渲染一个特定的域类型。(如果指定了想使用的类型(本例是 GuestResponse),MVC 将能够提供一些便于使用这个类型的便捷方法,从而可以在视图中方便地使用这个类型对象)
24. 如果已经创建了 GuestResponse 类,但未进行编译,MVC 将不能为这个类型创建强类型视图。 要编译应用程序,可以 “生成”——“生成解决方案”,或简单地按快捷键 F6。
25. 通过 “@using (Html.BeginForm()) { } ” 可以在视图中创建表单
<p>姓名:@Html.TextBoxFor(x=>x.Name) </p> // 输入框
<p>是否参加?@Html.DropDownListFor(x=>x.WillAttend, new[ ] { // 下拉框
new SelectListItem() { Text="是,我参加", value=bool.TrueString }, // 下拉选项
new SelectListItem() { Text="否,不参加", value=bool.FalseString } }, “请选择”) // 显式文本
</p>
<input type="submit" value="回复邀请" /> // 按钮
}
26. 这个TextBoxFor 辅助器方法会生成一个 type 为 “text” 的 input 元素的 HTML,将该元素的 id 和 name 标签属性设置为所选的域类的属性名。如:<input id="Phone" name="Phone" type="text" value="" />
27. 替代运用 lambda 表达式的另一种方法是将模型类型的属性名指定为一个字符串,如:@Html.TextBox("Email")
28. 为了接收并处理表单所递交的数据,这里打算使用一个聪明的特性——添加第二个 RsvpForm 动作方法,以形成如下作用:
一种方法用于响应 HTTP 的 GET 请求:GET 请求是某人单击一个链接时,浏览器正常发出的请求。
一种方法用于响应 HTTP 的 POST 请求:默认情况下,用 Html.BeginForm() 渲染的表单是由浏览器作为一个 POST 请求递交的。这个动作负责接收所递交的数据,并决定用它做什么。(这里需要这样做是因为并未给辅助器方法 Html.BeginForm 传递任何参数——于是它假设要回递的目标是请求此 HTML 文档的同一个 URL——动作方法)
29. 这两种方法都由相同的 URL 进行调用,但 MVC 确保会根据所处理的是 GET 请求或 POST 请求,来调用合适的方法。
[ HttpGet ]
public ViewResult RsvpForm() { return View(); }
[ HttpPost ]
public ViewResult RsvpForm(GuestResponse gr)
{
return View("Thanks", gr);
}
30. 验证是为了防止用户输入无意义的数据。
31. 在 MVC 应用程序中,验证条件定义在模型类中,并在运用模型类的所有地方生效。
32. ASP.NET MVC 中的验证规则声明是通过标准的 C# 注解属性特性来实现的。(需要引用 System.ComponentModel.DataAnnotations 命名空间)
33. 对于应用程序必须支持的业务或活动中存在的现实实体、操作以及规则等,可以对它们创建模型,称为域模型。—— 域模型往往是一组 C# 类型(类、结构等)
34. 域中的操作由域类型中定义的方法类实现,而域规则表示成这些方法中的逻辑。或者通过运用 C# 的注解属性来实现。
35. 域模型通常是持久化的,且一直处于活动状态;其实现有许多不同方式,但关系型数据库是最通常的选择。
36. 简言之,域模型是应用程序中业务数据及其处理的唯一和权威的定义。
37. 域模型方法解决了应用程序维护中出现的许多问题。 如果需要操作模型中的数据、添加新的过程或规则,域模型是应用程序必须修改的唯一地方。
38. 强制域模型与 ASP.NET MVC 应用程序的其余部分分离的一个常用办法是,将模型放在一个独立的 C# 程序集中(意即,将域模型放在应用程序的一个专门的子项目中)。采用这种方式,可以在应用程序的其他部分创建对域模型的引用,以确保不会引用其他地方。这在大型项目中是特别有用的,从第7章开始创建的示例中,所演示的就是这种方法。
39. 视图模型:它们只表现视图与控制器之间传递的数据。
40. 域模型:它包含业务领域的数据,以及处理这些数据的操作、转换和规则。
41. 视图(View):用于将模型的某些部分渲染成用户界面。
42. 控制器(Controller):处理传入的请求,执行模型上的操作,并选择渲染给用户的视图。
43. 模型不涉及 UI 渲染或请求处理——那些是视图和控制器的职责。(不要将视图和控制器的职责放到模型中进行定义,这些不是模型的职责)
44. 视图含有将模型元素显示给用户的逻辑,仅此而已。
45. 控制器是视图与模型之间的桥梁——请求来自客户端,并由控制器对其进行服务,进而选择一个相应的视图向用户进行显示,并在必要时执行模型上的相应操作。
46.显示数据的逻辑仅包含在视图中,而处理用户请求和用户输入的代码仅包含在控制器中。
47. 视图模型是指一种简单的模型类,只用于从控制器向视图传递数据。域模型则与之相反,它是数据、操作以及规则的完整表示。
学习总结(ASP.NET MVC 5)的更多相关文章
- 学习“迷你ASP.NET MVC框架”后的小结
看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...
- 源码学习之ASP.NET MVC Application Using Entity Framework
源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...
- 学习之-ASP.NET MVC Filter
MVC Filter 是典型的AOP应用,对MVC框架处理客户端请求注入额外的一些逻辑,如日志记录.缓存处理.异常处理和权限验证,性能检测(横切关注点),而这些逻辑通常与主要业务无关,被独立分开作为公 ...
- ASP.NET MVC学习笔记-----Filter2
ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...
- ASP.NET MVC学习笔记-----Filter
ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...
- Java进击C#——应用开发之Asp.net MVC
本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...
- 七天学会ASP.NET MVC(七)——创建单页应用
系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...
- Asp.Net MVC过滤器小试牛刀
在上学期间学习的Asp.Net MVC,基本只是大概马马虎虎的了解,基本处于知其然而不知其所以然.现在到上班,接触到真实的项目,才发现还不够用,于是从最简单的过滤器开始学习.不得不说MVC的过滤器真是 ...
- ASP.NET MVC 基础
ASP.NET MVC oo1 Mvc准备工作课程安排:ORM->AspNet MVC开发环境:VS2012/VS2013SqlServer2008/2005主讲Asp.Net Mvc4 Raz ...
- ASP.NET MVC上传文件
最近参考网络资料,学习了ASP.NET MVC如何上传文件.最基本的,没有用jQuery等技术. 1.定义Model public class TestModel { [Displ ...
随机推荐
- P2864 [USACO06JAN]树林The Grove
P2864 [USACO06JAN]树林The Grove 神奇的射线法+bfs 裸的bfs很难写....... 那么我们找一个最外围障碍点,向图的外边引一条虚拟射线. 蓝后bfs时经过这条射线奇数次 ...
- NFS Iptables放行服务端口
启动NFS会开启如下端口:1)portmapper 端口:111 udp/tcp:2)nfs/nfs_acl 端口:2049 udp/tcp:3)mountd 端口:"32768--6553 ...
- Hive-复制表
非分区表复制 复制一张非分区表,使用CREATE TABLE IF NOT EXISTS AS SELECT * FROM tb_name;只复制表结构,CREATE TABLE IF NOT EXI ...
- 07: jquery.cookie操作cookie
1.1 jquery.cookie常用方法 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术 1. 添加一个"会话cookie" $.cook ...
- xdebug安装方法
打开网址:https://xdebug.org/wizard.php 把phpinfo页面中输出的所有内容复制过来,粘贴在此处点下面那个按钮,系统会分析出你需要下载哪个版本的x-debug,还会告诉你 ...
- 20145319 《网络渗透》web安全基础实践
20145319 <网络渗透>web安全基础实践 问题回答 Sql注入攻击原理,如何防御 攻击原理:由于对于用户输入并没做出相应限制,因此可以通过构造特定的sql语句,达到自身的一些非法目 ...
- DTMF在VOIP中的解决方案
双音多频DTMF(Dual Tone Multi-Frequency)信令,因其提供更高的拨号速率,迅速取代了传统转盘式电话机使用的拨号脉冲信令.DTMF也应用在交互式控制中,诸如语言菜单.语言邮件. ...
- BZOJ 1049 数字序列(LIS)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1049 题意:给出一个数列A,要求:(1)修改最少的数字使得数列严格递增:(2)在( ...
- JavaScript常用操作,常用类
算术运算符 重点关注 算数,赋值,逻辑运算符,三目运算符 <!DOCTYPE html> <html> <head> <meta charset=" ...
- linux下有线网卡出现ADDRCONF(NETDEV_UP): eth0: link is not ready的解决方法
一.背景 2018年5月24日,笔者的pc已经连续运转两天了,突然要使用有线网卡,却发现有线网卡无法正常工作,于是查看了一下内核日志: r8169 0000:05:00.0 eth0: link do ...