1、controller中的每一个public method被称为action method,意味着你可以从web上通过URL来调用它,以此来执行一个action。

2、当我们从action method返回ViewResult对象的时候,将指示MVC提供一个视图。可以调用无参数的View()来创建ViewResult对象,例如return View(),这会告诉MVC为此action提供默认视图。例如,在HomeController中有action method名为Index(),那么它的默认视图就为Views/Home/index.cshtml 这是一个约定,这个约定就是视图拥有跟action method相同的的名字。

3、要为哪一个action method创建视图,就在这个action method上点鼠标右键,选择Add View

4、我们可以从action method中返回其他结果,除了字符串和ViewResult对象。例如,如果我们返回RedirectResult,将导致浏览器重新跳转到其他的URL。如果我们返回HttpUnauthorizedResult,我们会强制用户进行登录。

5、将数据从controller传递到view的一种方式是使用ViewBag对象。这是基础类Controller的一个成员。ViewBag是一个动态对象,你可以给它分配任何属性,并使这些值在随后提供的view中可见。

6、model是用于表现真实世界的对象、处理过程、以及定义问题的规则,也被称为domain(域)。model通常被称为domain model,包含C#对象(被称为domain object域对象),这就组成我们应用程序的论域,以及操纵它们的方法。一个设计良好的MVC应用开始于一个设计良好的model。

7、Html.ActionLink是HTML helper方法。ActionLink方法接收两个参数:第一个是显示出来的链接文字,第二个是点击该链接时要执行的行为(action)。例如@Html.ActionLink("RSVP Now", "RsvpForm")

8、不像传统的ASP.NET应用,MVC的URL不会直接指向物理文件。每一个action method都有自己的URL,MVC用ASP.NET的路由系统翻译这些URL并指定到对应的action上。

9、注意 没有action是出现404错误,有了action没有对应的view是出现找不到对应的页面

10、另一个便利的helper method是Html.BeginForm,它可以产生HTML的表单元素,可以postback给action method

用法如下:

@using (Html.BeginForm()) {

… form contents go here …

}

不带参数时,它会自动假设我们是想postback给同一个URL(也就是到达本页面的URL,也就是传回给本页面对应的action method)

正常地,当我们这样使用时,using语句确保控制流程流出该语句块作用范围(out of scope)时将对象销毁。这通常用于数据库连接,例如,确保在查询完成后关闭连接就可以这样用。(using关键字的应用不同于在类中将一个命名空间里的类带入到作用范围scope中。)

11、

为了接收和处理提交的表单数据,我们将添加第二个RsvpForm行为方法:

(1)响应HTTP GET请求的方法:每次有人点击链接时,浏览器发出的正常请求就是一个GET请求。当有人访问/Home/RsvpForm时就由这一版的行为负责显示初始化的空白表单。

(2)响应HTTP POST请求的方法:默认情况下,由Html.BeginForm()产生的表单被浏览器提交时将产生一个POST 请求。这一版的行为负责接收提交的数据并决定如何处理。

在两个独立的C#方法中处理GET和POST请求,让两个方法负责不同的任务,这可以使我们的代码保持整洁。两个行为方法都由同一个URL调用,MVC根据处理GET或POST请求来调用对应的方法。

12、在MVC应用中,有效性验证通常应用在domain model中,而不是在user interface。这意味着我们只需要在一个地方定义了我们的有效性规则,那么在任何使用了这个model class的地方它都有效。ASP.NET MVC支持随属性一起定义的声明式的验证性规则,在System.ComponentModel.DataAnnotations命名空间中。

13、Models定义了你的应用可以工作的范围(universe),以及在其中操纵数据的操作。另外还负责保留所有的状态和数据的一致性。Models不产生UI也不处理请求,这些是由view和controller负责的。View包含了将model中的元素显示给用户所必需的逻辑,再也没有其它多余的内容了。它们不会直接意识到model,也不会以任何方式直接跟model交流。Controller是view和model之间的胶合剂。客户端到来的请求由controller来服务,并选择合适的view来显示给用户,如果需要的话还会在model上执行合适的操作。

14、MVC体系结构的每一部分都是定义清晰并且独立的,这被称为“关注点分离”(separation of concerns)。在model中操纵数据的逻辑只会包含在model中,显示数据的逻辑只会包含在view中,处理用户的请求和输入的代码只会包含在controller中。有了清晰的分离,你的应用会非常容易维护和扩展生命期,不管它有多么大。

15、在MVC中,controller是C#类,通常派生自System.Web.Mvc.Controller类。派生于controller的类中的每一个public method都被叫做action method,通过ASP.NET的路由系统与结构化的URL相联系。当一个请求被发送到与URL相联系的action method时,controller类中的语句将被执行来在domain model上完成操作,并选择view来显示到客户端。

16、ASP.NET MVC不会施加任何约束在你的domain model实现上。你可以使用常规的C#对象来创建model,实现数据的留存(保留) 你可以使用任何一个数据库、或ORM框架、或者.NET支持的其他数据工具。Visual Studio创建一个/Models文件夹作为MVC项目模版的一部分。这适合简单的项目,更复杂的应用倾向于在单独的Visual Studio项目中来定义domain model。

17、我们已经描述过一个domain model如果表现你应用中的真实世界,包括表现你的对象、处理和规则。Domain model是MVC应用的核心。其他一切,包括view和controller只是与domain model互动的手段。

18、ASP.NET MVC没有指定domain model必须要用什么技术,我们可以自由选择可以与.NET框架交互的任何技术。不过,ASP.NET MVC也给我们提供了基础设施和约定来帮助我们连接到(伴随着controllers和views,以及MVC框架的)domain model中的类。这里有三个关健特性:

(1)Model binding,这是基于约定的特性,它使用进来的数据,通常是HTML表单post进来的数据来自动填充model object。

(2)Model metadata,让你描述你的model classes的含义给framework。例如,你可以对它们属性给出人类可读的描述,或者是给出提示他们如何显示。MVC框架会自动生成显示或者在视图上为你的model class生成可编辑的UI。

(3)Validation,在model binding期间执行,并应用被定义为metadata的规则。

.net mvc笔记1_ The MVC Pattern的更多相关文章

  1. MVC笔记之一:MVC编程模型

    MVC是ASPX.NET用于构造Web应用的一种框架,和传统的ASPX.NET开发模式(Web Form)在架构上相同,同样采用三层框架实现,但相比传输开的模式,各层架构更加规范. 传统三层架构: V ...

  2. spring mvc 笔记

    springmvc 课堂笔记 1.Springmvc是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想, ...

  3. thinkphp学习笔记7—多层MVC

    原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...

  4. MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具

    MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具集成Visual Studio 2013 MVC 5 Scaffolder + ...

  5. MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具集成Visual Studio 2013

    MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具 经过一个多星期的努力总算完成了单表,多表关联(一对多,多对一)的增删改查的代码 ...

  6. SSM 实训笔记 -11- 使用 Spring MVC + JDBC Template 实现筛选、检索功能(maven)

    SSM 实训笔记 -11- 使用 Spring MVC + JDBC Template 实现筛选.检索功能(maven) 本篇是新建的一个数据库,新建的一个完整项目. 本篇内容: (1)使用 Spri ...

  7. 学习笔记_Java_day12_设计模式MVC(13).JavaWeb的三层框架(14)

    MVC 1. 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Contr ...

  8. mvc 笔记

    @{ ViewBag.Title = "主页"; } <div> 这里就是渲染Body啦.~~不需要写神马<asp:Content />,其实因为Rende ...

  9. SpringMVC:学习笔记(1)——理解MVC及快速入门

    SprigMVC-理解MVC及快速入门 说明: 传统MVC-->JSPModel2-->Front Controller + Application Controller + Page C ...

随机推荐

  1. 20151222--Ajax三级无刷新

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. Qt 圆角矩形+鼠标左键拖动窗口

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWind ...

  3. QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData

    SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...

  4. Customizing Zend Studio Using the Welcome Page

    Customizing Zend Studio Using the Welcome Page Zend Studio enables you to add or remove plugins from ...

  5. Windows下Apache 虚拟主机 VirtualHost 配置

    以下方式适合原生 Apache, XAMPP 和 WAMP 套件 1.修改Apache配置文件(httpd.conf),如下: # Virtual hostsInclude conf/extra/ht ...

  6. spoj ONP - Transform the Expression 中缀转后缀

    题目链接 将中缀表达式转化为后缀表达式. 数字的话直接放到答案的字符串里. 如果是左括号就进栈, 右括号就让栈里的符号都出来直到第一个左括号. 否则的话比较当前符号的优先级和栈顶符号的优先级. #in ...

  7. IP地址、子网掩码和地址分类

    http://blog.csdn.net/bluishglc/article/details/47909593?utm_source=tuicool&utm_medium=referral 实 ...

  8. Flex整合Spring

    工程需要整合Spring和Flex,在网上众多方法中找到了下面这种,记录留存. 个人认为该方法更适合在已有Spring框架的工程中添加Flex时使用,对原工程内容(主要指配置文件)改动较小. 1.添加 ...

  9. 製程能力介紹(SPC introduction) ─ 製程能力的三種表示法

    製程能力的三種表示法 Ck: 準度指標 (accuracy)   Ck=(M-X)/(T/2) Cp: 精度指標 (precision)   Cp=T/(6σp) 規格為單邊時:Cp=(Tu-X)/3 ...

  10. [C#]Stream.Write Extension Method

    在处理Stream型态时常会使用到Stream.Write这个方法,每次都会有种疑问就是,大多数的处理都是要将Buffer整个写入,為何偏偏每次都要将索引带0,长度带為Buffer的大小呢?另外在处理 ...