一、什么是mvc?

mvc 是一种使用 mvc(model view controller 模型-视图-控制器)设计创建 web 应用程序的模式。

mvc全名是model view controller,是模型(model)-视图(view)-控制器(controller)的缩写, 一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。mvc被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。 view(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。 controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

一-1、认识mvc框架的结构

model(模型)表示应用程序核心(比如数据库记录列表)。 view(视图)显示数据(数据库记录)。 controller(控制器)处理输入(写入数据库记录)。

mvc 模式同时提供了对 html、css 和 javascript 的完全控制。

二、什么是model?(model在mvc中所起的作用)

model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。      所有的模型应该放到models目录下 

三、什么是view?及相关知识点

view(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。 所有的视图文件都应该放到views目录下. 如果在相应的视图目录中没有找到视图文件,那么会寻找views\shared目录下名称相同的视图文件 在aspx视图引擎中,可以使用asp服务器控件,但它的作用仅仅局限与生成html代码,而不推荐开发人员使用asp控件的事件.因此建议开发人员手工编写html标记。 但是手写html标记比较耗费时间,有没有更好的解决方案?答案就是使用html辅助方法。 html辅助方法的作用就是通过调用c#方法的方式,快速的生成相应的html标记. html辅助方法分为2大类:弱类型html辅助方法和强类型html辅助方法. 其中以for关键字结尾的都是强类型的辅助方法.下面的示例代码演示了二者的调用方式,以及生成的html源码。          

 

附:常用html辅助方法汇总

 

四、什么是controller?(controller在mvc中所起的作用)

controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。 所有的控制器必须放到controllers文件夹下; controller必须为公开类; 所有的控制器类名必须以controller结尾; 所有的控制器类都应该继承controller基类或实现icontroller接口的类; 在action中return view(),默认会返回和action名称一样的视图文件. 在控制器类中的返回值为actionresult的公开方法,这些方法在mvc中称为action。

四-(1)、controller中的action

action用于响应用户的各种请求,比如向客户端返回html文档、html片段、json数据、纯文本、文件等结果。在asp.net mvc中通过在action(行为或操作)方法中返回actionresult类型的对象来实现向客户端响应上面的各种结果。

actionresult类是个抽象类(抽象类无法直接被实例化). actionresult有很多实现类,不同的实现类用于响应客户端不同的结果。并且在controller类中提供了大量的辅助方法,这些辅助方法可以快速的创建各种actionresult. 下面是详细介绍( actionresult 的实现类)。

*viewresult类 viewresult类的作用是向客户端响应view目录中一个视图文件. controller类中提供了view()方法,来快速的返回一个viewresult类对象. 如:return view (“index”); *contentresult类 该类用于向客户端返回一段文本内容(纯文本\html…). 在controller类中的辅助方法为:controller.content(string  content);

*redirecttorouteresult类 该类的作用是从当前action跳转至其他action. 在controller类中的辅助方法为:redirecttoaction(“actionname”, “controllername”) *redirectresult类 在服务器端从当前action跳转到其他url地址. 在controller类中的辅助方法为:controller.redirect(string  url)

jsonresult类 该类用于向客户端返回一段json格式的字符串. 在controller类中的辅助方法为:controller.json(object  data); 注意:默认情况下mvc拒绝响应以get方式发送的ajax请求,需要使用jsonrequestbehavior.allowget。

*partialviewresult类 该类的作用是向客户端响应views目录的一个分部视图文件。分部视图就是只包含html片段的视图文件. 在controller类中的辅助方法为:controller.partialview();

*filepathresult类 该类用于实现文件下载. 在controller类中的辅助方法为:controller.file(string  filepath,  string  contenttype, string  filename);

 

四—(2)、如何在action中获取表单提交的数据?

诸如新增\修改等功能模块,我们往往会创建2个名称相同的action:一个action用于加载新增\修改页面;另一个action用于处理新增\修改页面提交的表单数据.那么如何区分在何时调用哪个action呢? 每种操作都对应两个方法重载,其中前面第一个没有特性前缀是http get模式访问服务器的,而第二个带有[httppost] attribute的方法是使用http post方式向服务器提交数据的。   第一个get方法用来显示初始化的界面,并处理客户端验证;这时如果用户数据有误,就根本不会进入第二个post方法。   如果js被浏览器禁用,第一个get方法只用来显示初始化界面,客户端验证失效,才会进入第二个post方法

表单中提交的数据,可以通过action的参数进行映射. 映射的前提条件:html标记的name属性值和action中参数的名称要一致. 下面的示例代码演示了映射的过程(注意粉色框标记的部分):

我们还可以有另外一种等价的写法,就是将映射的属性定义到一个实体类中,这样我们就可以在action中添加该实体类型的参数,参考代码如下所示:

小结:mvc三大组件的相互关系

 

在控制器中可以直接调用视图和模型

在视图中可以调用模型。

模型不能调用视图。

模型能够限定视图中使用的数据,但视图中使用的模型应由控制器提供。

在视图中可以调用控制器(通过视图中表单的提交和点击超链接的方式调用)。