我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ASP.NET MVC模式中应用程序结构详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ASP.NET MVC模式中应用程序结构详解

在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示:

一、App_Data

App_Data目录用于存储想要读取或写入的数据文件。

二、App_Start

App_Start文件夹目录如下图所示:

顾名思义:该目录用于保存一些功能的配置代码,例如路由、捆绑和过滤器等。

三、Content

Content文件夹目录如下:

该文件夹用于存放资源文件,例如CSS、图像和其他站点内容,而非脚本。

四、Controllers

Controllers文件夹目录结构如下:

该目录用于保存那些处理URL请求的Controller类。按照约定,项目中所有的Controller文件都放在该文件夹里面。

五、font

font文件夹目录结构如下:

该目录用于保存Bootstrap模板系统包含的一些自定义Web字体。

六、Models

该目录用于保存那些表示和操纵数据以及业务对象的实体类。

七、Scripts

Scripts文件夹目录结构如下:

该目录用于保存项目中所有的JavaScript库文件和脚本(.js)文件。

八、Views

Views文件夹目录结构如下:

该文件夹用于保存项目中的所有视图文件。包括以控制器名称命名的文件夹。按照约定:视图的名称和控制器里面的Action方法的名称必须一致,否则程序会报错。如下图所示:

从上面的截图中能够看出:视图的名称和控制器里面Action方法的名称一一对应。下面把About视图的名称改成About1,然后在访问About视图,看看是什么效果:

这是因为程序找不到名为About的视图,所以报错了。这就说明视图名称必须和Action方法名称一一对应。

在Views文件夹下面还有一个Shared文件夹,该文件夹目录如下:

该文件夹里面的视图相当于模板视图,任何控制器下面找不到的视图都会去Shared文件夹下面找相应的视图。_Layout.cshtml就是一个全局视图,用于整个项目的整体布局,后面会讲到该视图。

在上面的例子中,把About视图的名称改成了About1,现在在Shared文件夹下面创建一个About视图,然后在访问HomeController里面的About方法,看看这时程序显示的效果:

这时程序就不会报错了,因为Home文件夹下面没有名为About的视图,所以程序会去Shared文件夹下面查找名为About的视图。

九、Web.config

看下面的截图:

从上面截图中可以看出:项目中存在两个Web.config文件,一个位于项目的根目录中,另外一个Views文件夹下面,那么这两个Web.config文件有什么作用呢?

1、根目录下面的Web.config文件

根目录下面的Web.config文件是系统的配置文件,用于配置数据库连接字符串等。

2、Views文件夹下面的Web.config

看视图中的一段代码:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>CustomerAction</title>
</head>
<body>
    <div> 
        <h1>当前登录用户:@base.ViewData["UserId"]</h1>
    </div>
</body>
</html>

在上面一段代码中,有一句:@base.ViewData["UserId"],这里有一个base,base表示父类,F12查看定义:

#region 程序集 System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// D:\Practice\MVC\Demo\ASPNETMVCDemo\packages\Microsoft.AspNet.Mvc.5.2.7\lib\net45\System.Web.Mvc.dll
#endregion

namespace System.Web.Mvc
{
    //
    // 摘要:
    //     表示呈现使用 ASP.NET Razor 语法的视图所需的属性和方法。
    //
    // 类型参数:
    //   TModel:
    //     视图数据模型的类型。
    public abstract class WebViewPage<TModel> : WebViewPage
    {
        //
        // 摘要:
        //     初始化 System.Web.Mvc.WebViewPage`1 类的新实例。
        protected WebViewPage();

        //
        // 摘要:
        //     获取或设置 System.Web.Mvc.AjaxHelper 对象,该对象用于使用 Ajax 呈现 HTML 标记。
        //
        // 返回结果:
        //     用于使用 AJAX 呈现 HTML 标记的 System.Web.Mvc.AjaxHelper 对象。
        public AjaxHelper<TModel> Ajax { get; set; }
        //
        // 摘要:
        //     获取或设置 System.Web.Mvc.HtmlHelper 对象,该对象用于呈现 HTML 元素。
        //
        // 返回结果:
        //     用于呈现 HTML 元素的 System.Web.Mvc.HtmlHelper 对象。
        public HtmlHelper<TModel> Html { get; set; }
        //
        // 摘要:
        //     获取关联的 System.Web.Mvc.ViewDataDictionary 对象的 Model 属性。
        //
        // 返回结果:
        //     关联的 System.Web.Mvc.ViewDataDictionary 对象的 Model 属性。
        public TModel Model { get; }
        //
        // 摘要:
        //     获取或设置一个字典,其中包含在控制器和视图之间传递的数据。
        //
        // 返回结果:
        //     一个字典,其中包含在控制器和视图之间传递的数据。
        public ViewDataDictionary<TModel> ViewData { get; set; }

        //
        // 摘要:
        //     初始化 System.Web.Mvc.AjaxHelper、System.Web.Mvc.HtmlHelper 和 System.Web.Mvc.UrlHelper
        //     类。
        public override void InitHelpers();
        //
        // 摘要:
        //     设置视图数据。
        //
        // 参数:
        //   viewData:
        //     视图数据。
        protected override void SetViewData(ViewDataDictionary viewData);
    }
}

这说明视图里面的cshtml代码有一个父类:WebViewPage。那么WebViewPage是如何来的呢,看视图下面的Web.config文件:

十、Global.asax

下面看看Global.asax文件代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace ASPNETMVCDemo
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            // 注册所有区域路由
            AreaRegistration.RegisterAllAreas();
            // 注册过滤器
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            // 注册路由
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            // 绑定
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

程序启动的时候会首先执行Global.asax里面的Application_Start()方法,该方法只在程序启动的时候执行一次,完成初始化工作。修改代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.IO;

namespace ASPNETMVCDemo
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            string strFilePath = @"C:\LogInfo.txt";
            using (StreamWriter sw = new StreamWriter(strFilePath))
            {
                sw.WriteLine("网站启动");
                sw.Close();
            }

                // 注册所有区域路由
                AreaRegistration.RegisterAllAreas();
            // 注册过滤器
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            // 注册路由
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            // 绑定
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

运行程序,查看日志:

到此这篇关于ASP.NET MVC模式中应用程序结构详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ASP.NET MVC模式中应用程序结构详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java结构型模式中的组合模式详解

组合模式,又叫部分整体模式,它创建了对象组的数据结构组合模式使得用户对单个对象和组合对象的访问具有一致性。本文将通过示例为大家详细介绍一下组合模式,需要的可以参考一下
2023-02-16

Java 中组合模型之对象结构模式的详解

Java 中组合模型之对象结构模式的详解一、意图 将对象组合成树形结构以表示”部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 二、适用性你想表示对象的部分-整体层次结构你希望用户忽略组合对象与单个对
2023-05-31

基于Flask的Web应用程序插件式结构

事实上,很多应用程序基于插件式结构开发,可以很方便了扩展软件的功能,并且这些功能完全可以依托于第三方开发者,只要提供好接口和完备文档,比如wordpress、谷歌火狐浏览器等。Python这样的动态语言天生就支持插件式编程。与C++相比,P
2023-01-30

请谈谈PHP中的MVC设计模式。(PHP中的MVC架构是怎样的?如何应用?)

MVC模式将应用程序逻辑与表现分离,在PHP中广泛应用,提供代码可重用性、可测试性、可维护性、灵活性等优势。MVC架构由模型、视图和控制器组件组成。应用时,创建模型封装数据,创建视图呈现数据,创建控制器处理请求,并配置路由。MVC的缺点包括复杂性、过度工程和学习曲线,但通过遵循最佳实践(如保持模型瘦、视图纯、控制器精简),可以最大化其好处。
请谈谈PHP中的MVC设计模式。(PHP中的MVC架构是怎样的?如何应用?)
2024-04-02

Python程序中的观察者模式结构编写示例

察者模式定义 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。 设计原则 为了交互对象之间的松耦合设计而努力。松耦合的设计之所以能让我们
2022-06-04

JavaScript MVC架构中的控制器:理解控制器在应用程序中的角色

JavaScript MVC架构中的控制器是应用程序中负责处理用户输入、模型更新和视图渲染的关键组件。它充当应用程序的不同组件之间的桥梁,确保数据和交互的顺利流动。
JavaScript MVC架构中的控制器:理解控制器在应用程序中的角色
2024-02-12

JavaScript单例模式:构建应用程序的可靠基石

在软件设计中,单例是一种重要的设计模式,它可以确保全局范围内只有一个对象实例,从而简化对象的访问和管理。本文介绍了JavaScript单例模式,展示了它的实现方式,并讨论了它的优点和局限性。
JavaScript单例模式:构建应用程序的可靠基石
2024-02-06

详解设计模式中的工厂方法模式在Python程序中的运用

工厂方法(Factory Method)模式又称为虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,属于类的创建型模式。在工厂方法模式中,父类负责定义创建对象的公共接口,而子
2022-06-04

C++ Web应用程序的架构和设计模式有哪些?

c++++ web 应用程序架构涉及单体和微服务等架构,设计模式包括 mvc、restful api 和依赖注入。一个实用案例展示了使用 drogon、react、boost.di 构建的应用程序,其中后端使用 drogon 构建 rest
C++ Web应用程序的架构和设计模式有哪些?
2024-05-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录