ASP.NET MVC
Posted 小企鹅推雪球!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET MVC相关的知识,希望对你有一定的参考价值。
文章目录
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 Web窗体的完全替代方案。它建立在ASP.NET的顶层,因此开发人员在构建MVC应用程序时几乎可以享受/使用到所有的ASP.NET功能
ASP.NET MVC 的优点
- 将应用程序划分为模型,视图和控制器,实现分层
- 可以控制前端展示页面
- 便于为现有的应用程序添加更多的交互性和响应能力
ASP.NET MVC模式的详解
- MVC将分离应用程序的层次,将数据访问逻辑与显示逻辑分离
- 模型(Model)-描述正在使用的数据以及业务逻辑的一组类
- 视图(View)-定义如何显示应用程序的用户界面,就是html
- 控制器(Controller)-处理来自用户请求的类,整体应用程序的流程和特定的应用程序的逻辑
- 视图组件负责呈现用户界面,并且与模型交互通信,模型包含视图需要显示的所有数据,视图通常就没有太多逻辑
- 在一个web应用程序中,视图从模型中获取数据,并将数据插入到视图中进行呈现
- 组件的控制器当一个HTTP请求到达MVC应用程序时,该请求被路由到一个控制器,然后由控制器与数据库,文件系统或模型进行通信
ASP.NET 入门程序
- 在创建以MVC为模板的
ASP.NET WEB
应用程序后,如果立即运行程序会直接404报错 - 为了解决让项目正常启动,需要添加控制,选择
Controllers
文件夹,右键选择添加MVC 5 控制器-空
选项,添加控制器名位HomeController
的控制器, - 下列内容是
HomeController
控制器的内容
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace FirstMVCApp.Controllers
{
public class HomeController : Controller
{
// GET: Default
public String Index()
{
return "Hello World, this is ASP.Net MVC Yiibai";
}
}
}
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
框架利用路由将请求引导至控制器- 创建一个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参数
ASP.NET MVC路由的理解
- MVC应用程序使用ASP.NET路由系统决定URL如何映射到控制器和操作
- 当VS Studion创建MVC项目时会添加一些默认的路由来启动,运行应用程序时,每次都能看到浏览器中请求的URL中看到不同的端口号,因为vs studio 会在创建项目分配一个随机端口
ASP.NET 自定义路由
- 通过自定义路由可以修改动作的名称,或者有不同的ID参数,又或者一般情况下网站的URL结构不同,都可通过添加自定义路由来解决
- 将转到流程页面的代码如下
routes.MapRoute(
"Process",
"Process/{action}/{id}",
defaults: new{
controller = "Process", action = "List ", id = UrlParameter.Optional}
);
-
当客户端请求进来并寻找具有
Process/Action/Id
的URL
时,它们将会进入到Process
控制器。在这里可以指定路由的动作,默认动作使用的是List而不是Index
-
现在到达的请求看起来像
localhosts/process。
路由引擎将使用这个路由配置来传递它,所以它将使用List
作为的默认行为。 -
以下是完整的类实现。创建一个名称为: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
,并使用以下代码从此操作方法返回一些字符串,修改后的ProcessController
控制器内容如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace FirstMVCApp.Controllers
{
public class ProcessController : Controller
{
// GET: Process
public String Index()
{
return "ProcessController.Index() Index页面.";
}
// GET: Process
public String List()
{
return "ProcessController.List() 动作的默认页面.";
}
}
}
- 当运行此应用程序时,回看到默认的路由结果
ProcessController.List() 动作的默认页面
以上是关于ASP.NET MVC的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在使用 Asp.Net MVC ActionLink、RedirectToAction 等时包含片段标识符?
[Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作