一、ASP.NET是创建Web应用的框架,MVC是可以用更好的方法管理并组织代码的高级架构体系。
二、ASP.NET Web Form的优势
基于VS提供的可视化编程,可以简单的拖拽UI控件,后台自动生成代码。
三、ASP.NET Web Form的问题
(1)响应时间:服务器响应请求的时间
(2)带宽消耗:同时传输多少数据
响应时间为什么会变长:每次请求都有转换逻辑,运行并把服务器控件转换为HTML输出。这些转换增加了响应时间。解决方案是摆脱后台代码,写成纯HTML
带宽问题:Viewstates可以自动保存post返回状态,减少开发时间,但是会带来巨大的消耗——增加页面大小。解决方案是不使用服务器控件,直接写HTML代码
四、MVC
Controller中包含后台代码逻辑(核心)、View是ASPX(运行在服务器的动态网页文件)、如纯HTML代码、 Model是中间层
整体改变是将View办成简单的HTML代码,后台代码移动到.NET类中,称为控制器
ASP.NET MVC请求流的步骤:
(1)获取控制器
(2)依赖行为控制器创建Model对象,Model通过转换调用数据访问层
(3)数据填充Model,传递到View显示层,实现显示目的
五、Controller控制器
1、用户交互逻辑:能够处理用户请求以及用户交互行为的业务逻辑成为用户交互逻辑(用户交互逻辑写在服务器端)
2、在Web编程中没有事件的概念,ASP.NET Web Forms根据我们的行为自动创建了处理代码,所以回到自我们觉得是事件驱动的编程。流
六、使用VS新建ASP.NET MVC
1、新建ASP.NET MVC5项目
2、添加空MVC5控制器
在新建的时候,添加空 MVC 5 Controller是要注意名称中必须保留“controller”关键字,如:TestController,DemoController
如图示:
3、创建行为方法
在已经生成的代码中替换掉“Index”类,改为简单输出GetString()
namespace ASP.NET_WEB.Controllers { public class TestController : Controller { public string GetString() { return "Hello World Hello OHaYo"; } } }
注意:在运行的时候,需要手动在地址栏中输入尾缀“ControllerName/ActionName”,输入控制器的名字时,去掉关键字“Controller”,在本例中控制器的名字是“TestController”,所以输入“Test”即可。
具体效果如图示:
七、实验一
问题:TestController 与 Test 之间的关系是什么?
答案:TestController是类的名称,而Test是controller的名称,所以在URL中输入controller名称时,要去掉controller
问题:Action方法是什么?
答案:Controller内置的一个public类型方法,可以接收并处理用户的请求。
在ASP.NET Web Forms中默认的返回类型是HTML,如果需要返回其他类型请求,需要创建HTTP处理器,重写内容类型。String类型可以直接返回,不需要完整的HTML内容
问题:从Action方法中返回对象值会出现什么?
答案:会调用toString()方法,返回NameSpace.className形式的类名
问题:Action方法是不是只能用public修饰符修饰?
答案:是的,每个共有的方法都可以成为Action方法
问题:非public方法是什么?
答案:类的方法比较简单,并且不是公共可用的,无法再Web中调用
问题:如果需要一些其他函数来完成特定功能,但不是Action方法要如何实现?
答案:使用NonAction属性修饰,示例代码如下:
[NonAction] public string SimpleMethod() { return "Hi I am not the Action Method"; }
八、View部分
Controller是对用户请求做出响应,通常是显示在浏览器页面中。在ASP.NET MVC中将用户界面设计UI层称为View
实验二
1、创建新的Action方法
public ActionResult GetView() { return View("MyView"); }
2、右击新创建的Action方法,选择“添加视图”,将视图名称改为“MyView”,取消“使用布局”选项。新添加的视图文件在View / Test中。这里就是纯HTML代码了
问题:为什么View会放在Test文件夹中?
答案:View与放置在特定目录下的Controller有关,文件夹是用“ControllerName”命名的。实例中的ControllerName是Test,所以放在Test文件夹中
问题:在多个控制器中无法重用View吗?
答案:是可以的,不过需要将View文件放在特定的Shared文件夹中就可以让多个Controller使用
问题:单个Action方法中可以引用多个View吗?
答案:ASP.NET MVC中 View与Controller不是严格匹配的,一个Action方法可以引用多个View。对于一个Action方法中,也可以使用if语句来选择View
例如:
public ActionResult GetView() { Random i = new Random(); int x = i.Next(1, 10); if (x > 5) { return View("SecondView"); } else { return View("MyView"); } }
问题:View函数的功能是什么?
答案:创建ViewResult对象来渲染视图反馈给用户,就是用户看到的UI界面
问题:ViewResult与ActionResult的关系?
答案:ActionResult是抽象类,而ViewResult是ActionResult的多级节点孩子。是因为ViewResult是ViewResultBase的子节点,而ViewResultBase是ActionResult的子节点
问题:什么是ContentResylt?
答案:ViewResult是HTML响应,而ContentResult是标准的文本响应,只返回字符串类型。后者是ActionResutl的子节点