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

目录
  • 一、App_Data
  • 二、App_Start
  • 三、Content
  • 四、Controllers
  • 五、font
  • 六、Models
  • 七、Scripts
  • 八、Views
  • 九、Web.config
    • 1、根目录下面的Web.config文件
    • 2、Views文件夹下面的Web.config
  • 十、Global.asax

在上一篇文章中,讲解了一些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模式中应用程序结构详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ASP.NET MVC异常过滤器用法

    我们平常在程序里面为了捕获异常,会加上try-catch-finally代码,但是这样会使得程序代码看起来很庞大,在MVC中我们可以使用异常过滤器来捕获程序中的异常,如下图所示: 使用了异常过滤器以后,我们就不需要在Action方法里面写Try -Catch-Finally这样的异常处理代码了,而把这份工作交给HandleError去做,这个特性同样可以应用到Controller上面,也可以应用到Action方面上面. 注意: 使用异常过滤器的时候,customErrors配置节属性mode的值

  • ASP.NET MVC授权过滤器用法

    过滤器 过滤器(Filter)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,并不是每个请求都会响应内容,只有那些有特定权限的用户才能响应特定的内容.过滤器理论上有以下功能: 判断登录与否或者用户权限. 决策输出缓存. 防盗链. 防蜘蛛. 本地化与国际化设置. 实现动态Action(做权限管理系统经常用到). 1.使用方式一 第一种方法是在Controller或Action上面直接使用Authorize特性,不设置特性的任何属性.看下面的截图: 从上面的截图中可

  • ASP.NET MVC自定义异常过滤器使用案例

    目录 一.需求 二.案例 1.创建工具类 1.1.创建日志工具类 1.2.创建网络工具类 2.创建自定义异常类 3.创建控制器 4.测试 在上一篇文章中讲解了自定义异常过滤器,这篇文章会结合工作中的真实案例讲解一下如何使用自定义异常过滤器. 一.需求 本案例要实现的功能需求:在发生异常时记录日志,日志内容包括发生异常的Controller名称.Action名称.使用浏览器类型和版本等. 二.案例 1.创建工具类 首先创建项目中需要使用的工具类. 1.1.创建日志工具类 在案例中使用Log4net

  • ASP.NET MVC模式简介

    目录 一.MVC模式简介 1.MVC在Web框架中的应用 2.执行顺序 二.ASP.NET中的MVC 1.ASP.NETMVC和ASP.NET 2.ASP.NETMVC和WebForms 三.创建ASP.NETMVC 1.选择文件->新建->项目 2.选择.NETFramework版本的ASP.NETMVC 3.配置项目名称和路径 3.1.选择一种应用程序模板 3.2.测试 3.3.配置身份验证 一.MVC模式简介 MVC模式是一种流行的Web应用架构技术,它被命名为模型-视图-控制器(Mod

  • ASP.NET MVC自定义操作过滤器

    目录 一.操作过滤器 1.定义 2.案例 2.1.创建自定义操作过滤器 2.2.新建控制器 二.结果过滤器 1.定义 2.案例 三.案例 1.记录操作 1.1.创建实体类 1.2.创建日志类 1.3.修改操作过滤器类 2.实现权限控制功能 一.操作过滤器 1.定义 操作过滤器用于实现IActionFilter接口以及包装操作方法执行.IActionFilter接口声明两个方法:OnActionExecuting和OnActionExecuted.OnActionExecuting在操作方法之前运

  • ASP.NET MVC过滤器执行顺序介绍

    如果某个Action过滤器运用了多种过滤器,那么过滤器的执行顺序是如何呢? 规则一:不同类型的过滤器有一个先后顺序 即执行顺序是:授权过滤器->动作过滤器->结果过滤器->异常过滤器. 注意:如果ActionFilter过滤器执行过程中发生了异常,那么会执行ExceptionFilter过滤器,不会执行ResultFilter过滤器.上图所示的是正常情况下的执行顺序. 规则二:控制器上面的过滤器优先于方法上面的过滤器 即控制器和方法上面都使用了相同的过滤器,那么先执行控制器上面的过滤器.

  • ASP.NET MVC自定义异常过滤器

    一.异常过滤器 异常筛选器用于实现IExceptionFilter接口,并在ASP.NET MVC管道执行期间引发了未处理的异常时执行.异常筛选器可用于执行诸如日志记录或显示错误页之类的任务.HandleErrorAttribute类是异常筛选器的一个示例. 先来看看HandleErrorAttribute类的定义: #region 程序集 System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364

  • ASP.NET MVC使用母版页视图

    一.母版页介绍和使用 母版页的扩展名为".cshtml",也叫做视图布局页,它相当于网页的模板.在其他网页中,只要引用了母版页,母版页的页面内容就可以自动显示出来,设计者可以修改引用的母版页中预留的部分,其他部分保持不变,这样就可以使多个页面的风格保持一致,给网页设计带来了很大的方便. 1.创建母版页视图的要点 (1).在Views的子文件夹Shared文件夹里面添加. (2).以“_”前缀作为开头. (3).以"Layout.cshtml"作为结束. 2.MVC母

  • ASP.NET MVC缓存过滤器用法

    缓存过滤器用来输出页面缓存,其用法如下图所示: 注意: Duration:表示缓存多少秒;VaryByParam:表示缓存是否随地址参数而改变.OutputCache除了可以定义在Action方法上面以外,还可以定义在控制器上面. 演示示例: 新建一个MVC应用程序,添加一个名为Cache的控制器,Cache控制器的Index方法里面将当前时间输出到页面中,Cache控制器定义如下: using System; using System.Collections.Generic; using Sy

  • ASP.NET MVC实现区域路由

    目录 一.区域路由 二.示例程序 1.新建区域路由 2.注册区域路由 2.1.区域路由文件 2.2.全局注册区域路由 一.区域路由 为了管理网站中大量的文件,在ASP.NET MVC 2.0版本中引入了一个新概念:区域(Area). 有了区域以后,可以让我们的项目不至于太复杂而导致管理混乱.每个模块的页面都放入相应的区域内进行管理很方便.看下面的截图: 上图中有两个模块:一个是User模块,另一个是Product模块,所有关于这两个模块的Controller.Model.View都放入各自的模块

  • ASP.NET MVC自定义授权过滤器

    目录 一.授权过滤器 二.示例 1.添加对应实体类 2.添加测试数据 3.新建继承类 4.添加Account控制器 5.修改配置文件 6.添加授权控制器 三.测试 测试Welcome 四.总结 一.授权过滤器 授权过滤器用于实现IAuthorizationFilter接口和做出关于是否执行操作方法(如执行身份验证或验证请求的属性)的安全策略.AuthorizeAttribute类继承了IAuthorizationFilter接口,是授权过滤器的示例.授权过滤器在任何其他过滤器之前运行. 如果要自

随机推荐