`
javahigh1
  • 浏览: 1266860 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

理解模型,视图和控制器(C#)

阅读更多

这篇教程向你提供ASP.NET MVC 模型,视图和控制的高度概览。换句话说,解释一下ASP.NET MVC中的 ‘M’, ‘V’,和 ‘C’。

看完这篇教程以后,你应该就能理解ASP.NET MVC的不同部分是如何共同工作的。而且你也应该能够理解ASP.NET MVC程序的架构与ASP.NET Web窗体程序或ASP程序有如何的不同。

示例ASP.NET MVC 应用程序

用以创建ASP.NET MVC Web程序的默认的Visual Studio 模板包括一个极其简单的示例程序,可以用来理解ASP.NET MVC Web程序的不同部分。我们在这个教程里就利用这个简单程序吧。

运行Visual Studio 2008, 选择“文件”,“新建”(见图1),用MVC模板创建ASP.NET MVC程序。在“新建项目”对话框中,在“项目类型(P)”(Visual Basic 或者C#)中选择你喜欢的编程语言,并在“模板”下选择 ASP.NET MVC Web Application 。点击“确定”按钮。

New Project Dialog

图01: 新建项目对话框(点击查看完整大小)

创建完新的 ASP.NET MVC 程序后, 出现Create Unit Test Project 对话框(见图2). 这个对话框会在解决方案中为你创建一个单独的用来测试你的ASP.NET MVC程序的项目。选择选项 No, do not create a unit test project 并单击 OK 按钮。

图02: 创建单元测试对话框 (点击查看完整大小)

ASP.NET MVC 程序创建完成。你会在解决方案资源管理器窗口中看到几个文件夹和文件。特别是你会看到三个分别名为Models,Views和Controllers的文件夹。顾名思义,这三个文件夹包含了实现模型,视图和控制器的文件。

如果你展开Controllers文件夹,你会看到一个名为AccountController.cs和一个名为HomeControllers.cs的文件。展开Views文件夹,会看到三个分别名为Account,Home和Shared的子文件夹。展开Home文件夹,会看到两个分别名为About.aspx和Index.aspx的文件(见图3)。这些文件组成了包括默认ASP.NET MVC模板的示例程序。

图03:解决方案资源管理器窗口(点击查看完整大小)

选择“调试”,“启动调试”运行示例程序。或者按F5键也可以。

第一次运行 ASP.NET 程序时,会出现图4所示的对话框,建议你启动调试。 点击“确定”按钮程序就会运行起来了。

图04: 调试未启动对话框(点击查看完整大小)

运行ASP.NET MVC 程序时, Visual Studio 会在浏览器运行你的程序。示例程序包括2个页面:Index页和About页。程序首次启动时,出现Index页(见图5)。你可以点击程序右上方的菜单链接导航到About页。

图05: Index页 (点击查看完整大小)

注意浏览器地址栏的URL,当点击About菜单链接时,地址栏中的URL变为 /Home/About。

关闭浏览器窗口回到 Visual Studio,你找不到路径Home/About的文件。这个文件不存在,这怎么可能呢?

一个URL不等于一个页

生成传统的ASP.NEW Web窗体程序或ASP程序时,一个URL对应一个网页。如果向服务器一个名为 SomePage.aspx的页面发起请求 ,那么磁盘里最好存在这么一个名为SomePage.aspx的页面。如果 SomePage.aspx 文件不存在,将会得到一个丑陋的 404 – Page Not Found 错误。

相反,生成 ASP.NET MVC 程序时,在你输入浏览器地址的URL和你要在程序里找的文件之间并没有对应关系。在

ASP.NET MVC程序中, 一个URL并不对应磁盘上的页而是对应一个控制器action。

在传统 ASP.NET或者 ASP 程序中, 浏览器请求被映射到页面。相反,在 ASP.NET MVC 程序中, 浏览器请求被映射到控制器action。 ASP.NET Web 窗体程序以内容为中心。 相反,ASP.NET MVC 程序以程序逻辑为中心。

理解ASP.NET Routing

浏览器请求通过一个名为 ASP.NET Routing 的ASP.NET 框架特性来获得控制器action的映射。 ASP.NET Routing 被 ASP.NET MVC 框架用来对传入控制器action的请求进行路由

ASP.NET Routing 用一个路由表来处理传入的请求。当web程序第一次运行时这个路由表就会被创建。 它是在 Global.asax 文件中被创建的。默认的 MVC Global.asax 文件如代码1所示。

代码1 – Global.asax

ASP.NET 程序首次启动时, Application_Start() 方法会被调用。在代码 1中,此方法调用 RegisterRoutes() 方法创建默认路由表。

默认路由表只包括一个路由。这个默认的路由将传入的请求分为三段(一个URL段就是两个斜杠间的任何东西)。第一段映射到控制器名,第二段映射到action名,最后一段映射到一个传到action的名为Id的参数。

例如,考虑以下URL:

/Product/Details/3

这个URL 被解析为类似这样的3个参数:

Controller = Product

Action = Details

Id = 3

Global.asax 文件中定义的默认路由包括所有三个参数的默认值。默认的控制器是 Home, 默认的 Action是 Index, 默认的 Id 是空字符串。心里想着这些默认值,思考一下下面的URL是怎么解析的:

/Employee

这个 URL 被解析成类似这样的三个参数:

Controller = Employee

Action = Index

Id =

最后,如果你不输入任何URL(例如,http://localhost)就打开 ASP.NET MVC 程序的话URL就像这样解析:

Controller = Home

Action = Index

Id =

这个请求就被路由到HomeController类的 Index() action 中。

理解控制器

控制器负责控制用户与MVC程序交互的方式。控制器包括了ASP.NET MVC程序的流控制逻辑。控制器决定当用户发送一个浏览器请求时返回什么响应。控制器就是一个类(例如,一个Visual Basic或者C#类)。样例 ASP.NET MVC 程序包括一个位于Controllers文件夹中名为 HomeController.cs 的控制器。 HomeController.cs 文件内容转载在代码 2中。

代码 2 – HomeController.cs

注意HomeController 有两个方法,名为Index() 和About().。这两个方法对应由控制器暴露的两个action。 URL /Home/Index调用 HomeController.Index()方法而 URL /Home/About调用 HomeController.About() 方法。

控制器中的任何公共方法都被暴露为控制器action。对此你要特别小心。这意味着人们只要通过访问互联网,在浏览器中输入正确的URL,就可以调用控制器中的任何公共方法。

理解视图

由HomeController暴露的 Index() 和About() 这两个action都返回一个视图。视图包括HTML标记和发送到浏览器的内容。在ASP.NET MVC程序中视图等同于一个页面。你必须在正确的地方创建视图。HomeController.Index() action 返回一个位于以下路径的视图:

\Views\Home\Index.aspx

HomeController.About() action 返回一个位于以下路径的视图:

\Views\Home\About.aspx

通常,如果你想为控制器action返回视图,那么你需要在Views文件夹下创建一个与控制器同名的子文件夹。在此子文件夹内,你得创建一个与控制器action同名的 .aspx 文件。

代码3 中的文件包含 About.aspx 视图。

代码3 – About.aspx

如果你忽略代码3的第一行,视图的其余部分包含了标准的HTML。你可以输入任何你想要的HTML来修改视图的内容。

视图和ASP或ASP.NET Web窗体中的页面很相似。视图可以包含HTML内容和脚本。你可以用你喜欢的编程语言写脚本(例如,C#或Visual Basic .NET)。使用脚本来显示动态内容,例如数据库数据。

理解模型

我们已经讨论了控制器和视图。最后一个话题就是模型了。什么是MVC模型?

MVC 模型包含程序中的所有逻辑,而这些逻辑并不包含在视图或控制器中。模型应该包含所有程序业务逻辑,验证逻辑和数据库访问逻辑。例如,如果你用 Microsoft Entity Framework 来访问数据库,那么你要在Models文件夹中创建 Entity Framework类 ( .edmx 文件) 。

视图应该仅仅包含生成用户界面的逻辑。控制器应该仅仅包含返回正确视图的最小逻辑或者将用户重定向到其他action(流控制)。其它的任何事情都应该包含在模型中。

通常,你应该为“胖”模型和“瘦”控制器而努力。控制器方法应该只包含几行代码。如果控制器action变得太“胖”的话,那么就应该考虑将逻辑挪出到Models文件夹中的一个新类中。

总结

这篇教程提供给你ASP.NET MVC Web程序不同部分的高度概览。你学到了 ASP.NET Routing 如何将传入的浏览器请求映射到特定的控制器action。你学到了控制器如何编配,视图如何返回到浏览器。最后,你学到了模型如何包含程序业务,验证和数据库访问逻辑。

原文地址:http://www.asp.net/learn/mvc/tutorial-02-cs.aspx

分享到:
评论

相关推荐

    具有C#/ WinForms的模型视图控制器(MVC)模式

    **模型视图控制器(MVC)模式在C# WinForms中的应用** 模型视图控制器(MVC)是一种软件设计模式,常用于构建可维护性和可扩展性高的应用程序。该模式将应用程序逻辑分为三个主要组件:模型(Model)、视图(View)...

    C#MVC控制器前后端传值

    在C# MVC(Model-View-Controller)框架中,控制器是连接前端视图和后端模型的重要组件,负责处理用户请求、操作数据以及向视图传递数据。本篇将深入探讨C# MVC控制器如何实现前后端的数据交互。 一、基础知识 1. ...

    C# .NETCORE3.1 控制器中控制页面弹出提示框功能实现(ViewComponent实现)案例代码

    ViewComponent是MVC框架中的一种轻量级组件,它可以像视图一样被渲染,并且可以在控制器中被调用。它们通常用于展示与当前视图相关的但又相对独立的部分,比如侧边栏、用户登录状态或者像我们这个例子中的提示框。 ...

    UML 设计器 c# 2.0

    它应该与视图和控制器分离,遵循MVC(模型-视图-控制器)设计模式。 5. **UMLDes.Controls**:可能包含了自定义控件或扩展的.NET Framework控件,用于绘制和编辑UML元素,如形状、连线等。 6. **UMLDes.View**:视...

    01 -water C# MVC基础篇 -控制器与视图数据的传递

    在本课程中,"01 - water C# MVC基础篇 - 控制器与视图数据的传递",我们将深入探讨ASP.NET MVC框架的核心概念,特别是控制器(Controllers)和视图(Views)之间的数据交互。ASP.NET MVC是一个轻量级、模型-视图-...

    C# For ECharts 模型层建模库

    使用C# For ECharts,开发者可以在控制器中直接构建ECharts模型,通过JSON格式返回图表数据,无需手动拼接JSON字符串,提高了代码的可读性和维护性。 2. **ECharts Models**:ECharts Models是该库的核心部分,它...

    学习C#的例子

    模型与视图和控制器之间通过接口进行通信,确保数据的一致性和准确性。 接下来是“视图”(View)。视图是用户看到和与之交互的界面。在C# MVC中,视图通常由Razor视图引擎生成,它可以解析包含C#代码的HTML模板。...

    MVC简单例子C#

    模型负责处理数据和业务逻辑,视图负责展示数据,而控制器则作为模型和视图之间的桥梁,处理用户输入并更新视图。 1. **模型(Model)**:模型组件包含了应用的核心业务逻辑和数据。它不关心视图如何显示数据,也不...

    按钮切换两个视图

    每个视图控制器都有自己的视图(UIView)和数据模型,可以包含不同的界面元素和逻辑处理。 为了实现视图间的切换,我们可以使用多种方法。一种常见的方式是使用UINavigationController,它能够管理一系列堆叠的视图...

    C# MVC

    ### C# MVC:深入理解模型-视图-控制器架构 #### 概述 C# MVC(Model-View-Controller)是一种流行的软件设计模式,广泛应用于Web应用开发中,特别是使用.NET框架进行开发时。该模式将应用程序分为三个核心组件:...

    C#升降台控制程序

    在设计层面,考虑到软件工程的原则,项目可能采用了MVC(模型-视图-控制器)或MVVM(模型-视图-ViewModel)架构。这样可以将业务逻辑、用户界面和数据模型分离,提高代码的可读性和可维护性。视图负责显示信息,控制...

    winform mvc(C#)

    通过引入MVC模式,我们可以将这三个主要组件——模型(Model)、视图(View)和控制器(Controller)——分离,从而提高代码的可读性、可测试性和可维护性。 **模型(Model)** 模型是应用程序的核心,负责处理业务...

    c# ASP.NET MVC视频

    模型负责数据的管理和业务逻辑,视图负责展示用户界面,控制器接收用户请求并协调模型和视图的交互。 **模型(Model)** 模型是应用程序的核心,包含业务逻辑和数据实体。开发者可以使用Entity Framework或其他ORM...

    MVC视图代码逻辑MVC视图代码逻辑

    在Web应用开发中,Model-View-Controller(MVC)模式是一种常用的设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式使得开发更加模块化,提高了代码的可维护性...

    管理系统 mvc asp.net c# demo 示例 代码

    此示例代码集成了C#和ASP.NET MVC的功能,展示了如何实现数据模型、视图和控制器之间的交互,以及如何处理用户请求和展示数据。” 【知识点详细说明】: 1. **MVC架构**:MVC是一种分层架构,将应用程序分为三个...

    C# 实现Windows文件资源管理器

    - 考虑到代码的可维护性和扩展性,可以采用MVC(模型-视图-控制器)或MVVM(模型-视图-ViewModel)设计模式,将界面逻辑与业务逻辑分离。 9. **测试和调试**: - 完成代码编写后,要进行详尽的测试,确保所有功能...

    C#代码生成器

    生成器可以生成控制器或窗体类,以及与BLL交互的代码,负责接收用户输入,调用业务服务,然后返回结果到视图。 4. 实体类(Entities):代码生成器能根据数据库表结构自动生成实体类,每个类代表一个数据库表,属性...

    C#MVC 三层架构 ,清晰明了 bootsrap

    它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller),以实现业务逻辑、数据处理和用户界面的分离。 1. 模型(Model): - 模型层是应用程序的核心,负责管理业务逻辑和数据。它...

    C#基于MVC的博客系统源码.zip

    控制器作为模型和视图之间的桥梁,处理用户请求,更新模型,并指示视图进行相应的显示。 二、C# MVC框架 ASP.NET MVC是Microsoft为C#开发者提供的一个用于构建Web应用的开源框架,它允许开发者使用MVC模式进行开发...

Global site tag (gtag.js) - Google Analytics