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

 更新时间:2022年03月18日 08:56:31   作者:.NET开发菜鸟  
本文详细讲解了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模式中应用程序结构详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • ASP.NET中Application、Cookie、Session、Cache和ViewState

    ASP.NET中Application、Cookie、Session、Cache和ViewState

    本文主要介绍Application、Cookie、Session、Cache和ViewState,并总结了在什么情况下使用他们,希望对大家有所帮助。
    2016-04-04
  • 抓取页面信息方法介绍

    抓取页面信息方法介绍

    我们知道,一般网页中的信息是不断翻新的,这也要求我们定期的去抓这些新信息,但是这个“定期”该怎么理解,也就是多长时间需要
    抓一次该页面,其实这个定期也就是页面缓存时间,在页面的缓存时间内我们再次抓取该网页是没有必要的,反而给人家服务器造成压力
    2012-11-11
  • ASP.NET MVC项目部署方式介绍

    ASP.NET MVC项目部署方式介绍

    这篇文章介绍了ASP.NET MVC项目的部署方式,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Asp.Net常用函数

    Asp.Net常用函数

    Asp.Net常用函数...
    2007-03-03
  • asp.net Timer的使用方法

    asp.net Timer的使用方法

    使用方法很简单,对于需要使用asp.net下timer控件的使用是个不错的例子
    2008-10-10
  • asp.net实例代码protected override void Render(HtmlTextWriter writer)

    asp.net实例代码protected override void Render(HtmlTextWriter wri

    把最终要输出的html压缩后再输出和最终输出前先存为html文件,如果发布最新信息了,可以打开一次default.aspx,然后他又会生成一次html
    2008-08-08
  • .Net行为型设计模式之观察者模式(Observer)

    .Net行为型设计模式之观察者模式(Observer)

    这篇文章介绍了.Net行为型设计模式之观察者模式(Observer),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • ASP.NET Core基础之启动设置

    ASP.NET Core基础之启动设置

    这篇文章介绍了ASP.NET Core基础之启动设置,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • ASP.NET MVC中_ViewStart.cshtml作用介绍

    ASP.NET MVC中_ViewStart.cshtml作用介绍

    这篇文章介绍了ASP.NET MVC中_ViewStart.cshtml的作用,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • C#命名空间System.ComponentModel属性方法汇总

    C#命名空间System.ComponentModel属性方法汇总

    本文详细讲解了C#命名空间System.ComponentModel属性方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01

最新评论