ASP.NET MVC
程序员文章站
2022-06-11 13:02:17
...
ASP.NET MVC 简介
- ASP.NET MVC是微软的web开发框架,结合了MVC(模型-视图-控制器)体系结构的特点
- MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式
- Modele(模型):表示应用程序核心(比如数据库记录列表)
- View(视图):显示数据(数据库记录)
- Conteoller(控制器)处理输入(写入数据库记录)
- MVC模式同时提供了对THML,CSS和JavaScript的完全控制
ASP.NET MVC 的优点
- 将应用程序划分为模型,视图和控制器,实现分层
- 可以控制前端展示页面
- 便于为现有的应用程序添加更多的交互性和响应能力
ASP.NET MVC模式的详解
- MVC将分离应用程序的层次,将数据访问逻辑与显示逻辑分离
- 模型(Model)-描述正在使用的数据以及业务逻辑的一组类
- 视图(View)-定义如何显示应用程序的用户界面,就是html
- 控制器(Controller)-处理来自用户请求的类,整体应用程序的流程和特定的应用程序的逻辑
- 视图组件负责呈现用户界面,并且与模型交互通信,模型包含视图需要显示的所有数据,视图通常就没有太多逻辑
- 在一个web应用程序中,视图从模型中获取数据,并将数据插入到视图中进行呈现
- 组件的控制器当一个HTTP请求到达MVC应用程序时,该请求被路由到一个控制器,然后由控制器与数据库,文件系统或模型进行通信
ASP.NET MVC的生命周期
- 生命周期就是用来处理某种类型的请求或改变应用程序状态的一系列步骤或事件
- ASP.NET 或者其他的框架都有自己应用程序的生命周期
- ASP.NET MVC有两个生命周期:应用程序生命周期和请求生命周期
应用程序生命周期
- 应用程序生命周期时指应用程序实际开始运行IIS的时间,直到停止,
- 应用程序生命周期的开始和结束由应用程序启动文件中的应用程序开始和结束事件标记
请求生命周期
- 当HTTP请求由应用程序处理时,就是发生的事件序列
- 每个MVC应用程序的入口都以路由开始,在ASP.NET收到请求后,会找出如何通过URL路由模块去处理这个请求
- 模块时可以挂入应用程序生命周期并添加功能的.NET组件
- 路由模块负责将传入的URL与应用程序中定义的路由进行匹配
- 所有的路由都有一个关联的路由处理器,是MVC框架的入口点
- MVC的框架处理将路由数据转换为可处理请求的具体控制器,当控制器创建完成后,动作调用者组件找到并选择适当的
Action
方法调用控制器,在动作结果准备好之后,会触发下个阶段,即执行结果 - MVC分离声明执行结果的结果,如果结果是视图类型,则视图引擎将会被调用,视图引擎负责查找和渲染视图,如果结果不是视图,则操作结果将自动执行,这个结果执行时生成对原始HTTP请求的实际响应
ASP.NET MVC路由
- 路由是指向一个控制器的HTTP请求的过程,处理路由请求的功能是在
System.Web.Routing
中实现的,这个程序集不是ASP.NET MVC的一部分,它实际上是ASP.NET运行的一部分 -
System.Web.Routing
由MVC框架使用,但是也被ASP.NET动态数据使用, -
MVC
框架利用路由将请求引导至控制器,Global.asax
文件是应用程序的一部分,可以在此文件中定义应用程序的路由
Global.asax文件内容
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MVC
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
下面是RounteConfig类的实现,包含RegisterRoutes方法,RounteConfig类在App_Start中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MVC
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
- 我们可以自己定义路由,这些路由将URL映射到特定的控制器操作, 一个动作指示控制器上的一个方法
2.路由也可以从URL中选择参数并将这些参数作为参数传递给方法 - 在应用程序中定义的这个路由时默认路由,一个URL以
{controller}/{action}/{id}
的形式到达时,第一个是控制器的名称,第二个是动作的名称,第三个是一个ID参数 - MVC应用程序使用ASP.NET路由系统决定URL如何映射到控制器和操作
- 当创建MVC项目时会添加一些默认的路由来启动,运行应用程序时,每次都能看到浏览器中请求的URL中看到不同的端口号,因为vs studio 会在创建项目分配一个随机端口
ASP.NET 自定义路由
- 创建一个名为:MyRouteConfig的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MVC.Controllers
{
public class MyRouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Process", "Process/{action}/{id}",
defaults: new
{
controller = "Process",
action = "List",
id =
UrlParameter.Optional
});
routes.MapRoute(
name: "Home", url: "{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "Index",
id =
UrlParameter.Optional
});
}
}
}
}
-
第一步:运行我们的项目,在URL:http://localhost:53968/Process下出现错误,将看到一个HTTP 404,因为路由引擎正在查找ProcessController,但是不可用
-
第二步:通过右键点击,解决方案中的中的
Controllers
文件夹来创建ProcessController
,然后选择:添加 -> 控制器 。 -
第三步:选择MVC 5 控制器-空选项,然后点击添加,
-
第四步:将名称名称设置为ProcessController,然后单击“添加” 按钮。
-
第五步 - 将返回类型从ActionResult更改为String,并使用以下代码从此操作方法返回一些字符串
ASP.NET mvc控制器
- 控制器是ASP.NET MVC应用程序的中心单元,控制器是第一个请求接收者,与传入的HTPP请求进行交互,
- 控制器决定选择哪个模型,然后从模型中获取数据,并将数据传递给相应的视图,然后渲染视图
- 实际上,控制器控制应用程序的整体流程,并输出正确的输出
- 控制器继承自
System.Web.mvc.controller
的c#,是内置的控制器基类,控制器中的每个公共方法都统称为一个操作方法,可以通过某个URL从Web调用控制器执行操作 - MVC约定将控制器放在项目创建时默认的文件夹
Controllers
中