在ASP.NET网站中,URL通常映射到存储在磁盘上的文件(通常为.aspx文件)。这些.aspx文件包括经过处理以响应请求的标记和代码。
ASP.NET MVC框架将URL映射到不同于ASP.NET Web窗体页面的服务器代码。该框架会将URL映射到controller类,而不是将URL映射到ASP.NET页面或处理程序。Controller类将处理传入的请求,如用户输入和交互,并根据用户输入执行相应的应用程序和数据逻辑。Controller类通常会调用一个生成HTML输出作为响应的单独视图组件。
ASP.NET MVC 框架会将模型、视图和控制器组件分开。模型表示应用程序的业务/域逻辑,通常具有数据库支持的数据。 视图由控制器进行选择,并呈现相应的 UI。 默认情况下,ASP.NET MVC 框架使用现有的 ASP.NET 页面 (.aspx)、母版页 (.master) 和用户控件 (.ascx) 类型呈现到浏览器。 控制器将在自身中查找相应的操作方法,获取要用作操作方法参数的值,并处理可能会在运行操作方法时发生的任何错误。 然后,它将呈现请求的视图。 默认情况下,每组组件都位于 MVC Web 应用程序项目的单独文件夹中。
URL路由
ASP.NET MVC框架将使用ASP.NET路由引擎,通过该引擎可以灵活地将URL映射到controller类。您可以定义ASP.NET MVC框架使用路由规则,以评估传入的URL以及选择相应的控制器。您还可以让该路由引擎自动分析URL中定义的变量,并让ASP.NET MVC框架将值作为参数自变量传递给控制器。
MVC框架和回发
ASP.NET MVC框架不使用ASP.NET Web窗体回发模型与服务器交互,而是会将所有最终用户交互路由到controller类。这样可使UI逻辑与业务逻辑保持分开并有助于提高可测试性。因此,ASP.NET视图状态和ASP.NET Web窗体页面生命周期事件不会与基于MVC的视图集成。
MVC项目模板
ASP.NET MVC 框架包括 Visual Studio 项目模板,该模板可帮助您创建为支持 MVC 模式而构造的 Web 应用程序。此模板可创建一个新的 MVC Web 应用程序,该应用程序被配置为具有必需的文件夹、项模板和配置文件项。
注意:ASP.NET MVC Web 应用程序项目模板基于 ASP.NET Web 应用程序项目模板。通过从“文件”菜单中选择“新建项目”,而不是选择“新建网站”,您可以选择新 ASP.NET MVC 项目。
创建新 MVC Web 应用程序时,Visual Studio 可让您选择同时创建两个项目。第一个项目是 Web 项目,您将在该项目中实现应用程序。第二个项目是单元测试项目,您可以在该项目中为第一个项目中的 MVC 组件编写单元测试。
Web应用程序MVC项目结构
创建 ASP.NET MVC Web 应用程序项目时,MVC 组件会按项目文件夹分开,如下图所示:
默认情况下,MVC 项目包括以下文件夹:
· App_Data,这是数据的物理存储区。此文件夹的作用与它在使用 Web 窗体页面的 ASP.NET 网站中的作用相同。
· Content,建议在此位置添加内容文件,如级联样式表文件、图像等。通常,Content 文件夹用于存储静态文件。
· Controllers,建议在此位置存储控制器。MVC 框架要求所有控制器的名称均以“Controller”结尾,如 HomeController、LoginController 或 ProductController。
· Models,这是为表示 MVC Web 应用程序的应用程序模型的类提供的文件夹。此文件夹通常包括定义对象以及定义与数据存储交互所用的逻辑的代码。通常,实际模型对象将位于单独的类库中。但是,在创建新应用程序时,您可以将类放在此处,然后在开发周期中稍后的某个时刻将其移动到单独的类库中。
· Scripts,建议在此位置存储支持应用程序的脚本文件。默认情况下,此文件夹包含 ASP.NET AJAX 基础文件和 jQuery 库。
· Views,建议在此位置存储视图。视图使用 ViewPage (.aspx)、ViewUserControl (.ascx) 和 ViewMasterPage (.master) 文件,以及与呈现视图相关的任何其他文件。在 Views 文件夹中,每个控制器都具有一个文件夹;该文件夹以控制器名称前缀命名。例如,如果控制器名为 HomeController,则 Views 文件夹包含名为 Home 的文件夹。默认情况下,当 ASP.NET MVC 框架加载视图时,它将在 Views\控制器名称 文件夹中寻找具有请求的视图名称的 ViewPage (.aspx) 文件。默认情况下,Views 文件夹中也有一个名为 Shared 的文件夹,但该文件夹不与任何控制器相对应。Shared 文件夹用于存储在多个控制器之间共享的视图。例如,您可以将 Web 应用程序的母版页放在 Shared 文件夹中。
除了使用前面列出的文件夹之外,MVC Web 应用程序还使用 Global.asax 文件中的代码来设置全局 URL 路由默认值,并且使用 Web.config 文件来配置应用程序。
全局URL路由默认值
路由在 Global.asax 文件的 Application_Start 方法中初始化。下面的示例演示一个包含默认路由逻辑的普通 Global.asax 文件。
public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } }