0

0

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

伊谢尔伦

伊谢尔伦

发布时间:2016-11-25 09:29:59

|

1310人浏览过

|

来源于php中文网

原创

 这篇文章向你提供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 。点击“确定”按钮。

2115.jpg

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

 2116.jpg

图2 创建单元测试对话框

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

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

2117.jpg

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

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

 2118.jpg

图4 调试未启动对话框

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

2119.jpg

注意浏览器地址栏的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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
 
namespace MvcApplication1
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode,
    // visit http://go.microsoft.com/?LinkId=9394801
 
    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);
        }
    }
}

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

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

  例如,考虑以下URL:

  /Product/Details/3

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

  Controller = Product

  Action = Details

猫宁Morning公益商城系统
猫宁Morning公益商城系统

猫宁Morning公益商城是中国公益性在线电子商城,以商城B2C模式运营的公益在线商城,是一家致力于将传统公益商城互联网化的创新公益商城。该网上商城系统分为电子商城系统、公益商城系统、后台管理系统,使用Maven对项目进行模块化管理,搭建多模块企业级项目。Morning是在Spring Framework基础上搭建的一个Java基础开发平台,以Spring MVC为模型视图控制器,MyBatis为

下载

  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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Title"] = "Home Page";
            ViewData["Message"] = "Welcome to ASP.NET MVC!";
 
            return View();
        }
 
        public ActionResult About()
        {
            ViewData["Title"] = "About Page";
 
            return View();
        }
    }
}

注意 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

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
 

    

About

Put content here.

如果你忽略代码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。你学到了控制器如何编配,视图如何返回到浏览器。最后,你学到了模型如何包含程序业务,验证和数据库访问逻辑。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

109

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

16

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

136

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

7

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

6

2026.01.26

2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

122

2026.01.26

个人所得税税率表2026 个人所得税率最新税率表
个人所得税税率表2026 个人所得税率最新税率表

以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

35

2026.01.26

oppo云服务官网登录入口 oppo云服务登录手机版
oppo云服务官网登录入口 oppo云服务登录手机版

oppo云服务https://cloud.oppo.com/可以在云端安全存储您的照片、视频、联系人、便签等重要数据。当您的手机数据意外丢失或者需要更换手机时,可以随时将这些存储在云端的数据快速恢复到手机中。

121

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7.7万人学习

C 教程
C 教程

共75课时 | 4.2万人学习

C++教程
C++教程

共115课时 | 14.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号