当前位置: 代码网 > it编程>编程语言>Asp.net > ASP.NET MVC模式中应用程序结构详解

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

2024年05月18日 Asp.net 我要评论
在文章中,讲解了一些mvc的概念,并且创建了第一个asp.net mvc项目,这篇文章将讲解asp.net mvc程序中的代码解构,新创建的mvc应用程序解构如下图所示:一、app_dataapp_d

在文章中,讲解了一些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)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com