博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
艾伟_转载:学习 ASP.NET MVC (第一回)理论篇
阅读量:5781 次
发布时间:2019-06-18

本文共 2851 字,大约阅读时间需要 9 分钟。

本系列文章导航

MVC

三种角色
--Model:用于存储数据的组件
--View:根据Model数据进行内容展示的组件
--Controller:接受并处理用户指令(操作Model),选择一个View并输出内容。
Controller对View进行引用,但是View不知道Controller的存在。Controller和View都是单向引用Model
MVC变种:Observer模式,MVP模式。

MVC与三层架构

三层架构是一种架构模式,它有很明显的层次关系,而MVC是一种表现模式,其中的三个元素没有层次上的先后关系,只是组件之间的协作。

MVC与WebForms

WebForms提倡的是将Web开发抽象成一个组件模型,使用方便,入门容易,但是封装性太强,用好很难,内部有复杂的生命周期和事件处理。

ASP.NET MVC的优势

1.直接,没有太多控件的概念
2.易于对界面逻辑进行单元测试
3.易于前后台人员的配合
....

ASP.NET MVC的组件协作(基本流程)

URL-->Controller(会执行一个方法Action)-->从数据库中获取一个Model对象-->将Model作为ViewData传递给View(Detail.aspx)。
主要的几个步骤:URL Routing,Controller&Action Executing,View Rendering

URL Routing:

ASP.NET MVC使用的是URL进行驱动的,根据程序中指定的规则从URL中确定Controller名,Action名,其他参数。

System.Web.Routing.dll。独立于ASP.NET MVC框架的组件,可用于任何ASP.NET应用程序。作用是将URL转换为RouteData等数据。

使用:
1>.配置UrlRoutingModule。
2>.在Application_Start时添加规定,这里需要注意锁定的问题(由于Web应用程序天生是多线程的)。
3>.规则的顺序。
4>.RouteExistingFiles属性。

在Global.asax文件中定义:

Code
//URL规则的定义
public static void RegisterRoutes(RouteCollection routes)
{
     routes.MapRoute(
     
"Default",
     
"{controller}/{action}/{id}",
     
new {action="Index",id=0},
     
new {controller=@"^\w+",id=@"\d+"});
   
     
//Car/bnw.abc
     routes.MapRoute(
     
"Car",
     
"Car/{make}.{model}",
     
new {controller="car",action="Index"},
     
new {make=@"(acural|bnw)"});
}
protect 
void Application_Start()
{
     RegisterRoutes(RouteTable.Routes);
     RouteTable.Routes.RouteExistingFiles
=true;
}

如果URL访问的是磁盘上的一个物理文件,默认情况下不会被URL Routing,可以用RouteTable.Routes.RouteExistingFiles=true;避免。

Routing和URL Rewrite的区别:

URL Rewrite:改变程序处理的URL(ASP.NET WebFrom)
URL Route:根据URL的规则选择执行(MVC)
Controller & Action
通过URL Routing确定的Controller类和Action方法。Action中执行的是表现逻辑,根据用户传入的参数(URL)来操作Model(执行业务逻辑)-->获取数据-->选择一个View进行输出。
Action执行之后返回的是一个ActionResult(生成html,页面跳转...)
Controller是一个类,而Action是一个方法。
Conetroller的要求:
1>.继承System.Web.Mvc.Controller类
2>.以Controller结尾
3>.XyzController的名称即为:Xyz-->约定胜于配置
4>.ASP.NET MVC框架会在Web应用程序所引用的所有程序及范围内查找Controller。

Action的要求:

必须是个公有的方法
返回ActionResult类型,也可以返回void。直接使用Response.Write
必须是实例方法
不能使泛型方法
没有标注NonActionAttribute
不能被重载

ActionResult:是一个抽象类表示Action的执行结果,ASP.NET MVC架构将在获得ActionReault之后执行其Execute方法。

内置的ActionResult:ActionRedirectResult:跳转到某个Action。HttpRedirectResult:跳转到任意地址。RenderViewResult:生成内容。EmptyResult:什么都不做。JsonResult:用于JSON序列化输出。ContentResult:直接输出字符串。

 

生成View

ViewEngine(表明使用了什么样的View进行生成),它是可替换的。
默认使用aspx,ascx,master
MvcContrib提供了额外的4种ViewEngine。
ASP.NET MVC的默认View:.aspx--页面内容的主体,.master--模板框架,.ascx--局部视图:Html.RenderUserControl方法将一个UserControl生成局部视图。
需继承System.Web.Mvc.ViewPage
--ViewData有个属性为Model
--ViewPage的ViewData为T类型
--默认的ViewPage近似于ViewPage

View中生成html的方式:

1>.内联脚本方式:for{},foreach{}。类似ASP,但是并不是业务逻辑和显示的html放在一起。两者还是分离的。
使用脚本最大的好处就是使用灵活。调试起来是不是不是很方便???
2>.使用控件:Repeater(推荐)可以用来显示一维数据,ListView (推荐)可以用来显示二维数据
3>.使用辅助方法
--HtmlHelper类:提供的一些辅助的方法为我们生成Form,ActionLink,Button,CheckBox,Select(下拉框),Encode....的HTML
方法中提供了很多重载。
--UrlHelper类:生成Url以及与Url相关的东西。比如生成Action的Url。

你可能感兴趣的文章
进阶开发——文档,缓存,ip限速
查看>>
vue中子组件需调用父组件通过异步获取的数据
查看>>
uva 11468 - Substring(AC自己主动机+概率)
查看>>
Mysql 数据备份与恢复,用户创建,授权
查看>>
沉思录
查看>>
Angular.js中的$injector服务
查看>>
构建之法读书笔记01
查看>>
linux - lsof 命令最佳实践
查看>>
kafka性能测试
查看>>
现实世界的Windows Azure:h.e.t软件使用Windows Azure削减50%的成本
查看>>
深入.net框架
查看>>
聚合类新闻client产品功能点详情分析
查看>>
湘潭邀请赛——Alice and Bob
查看>>
js设置定时器
查看>>
数据库除运算
查看>>
LeetCode--112--路径总和
查看>>
DeviceIOControl与驱动层 - 缓冲区模式
查看>>
感悟贴2016-05-13
查看>>
vim使用教程
查看>>
JDK在LINUX系统平台下的部署案例与总结
查看>>