码迷,mamicode.com
首页 > Web开发 > 详细

【MVC】ASP.NET MVC 4项目模板的结构简介

时间:2015-06-21 01:58:08      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:

引言

    在VS2012新建一个窗体验证的MVC 4项目后,可以看到微软已经帮我们做了很多了,项目里面该有的都有了,完全可以看成一个简单网站.作为开发,能理解里面文件结构和作用,也算是半只脚踏进MVC的大门了.下面依次介绍其中的文件作用.

       技术分享

App_Start

       AuthConfig.cs

       AuthConfig类的RegisterAuth用来注册外部登录,具体作用在于用户可以用外部的账号登录本网站.

       BundleConfig.cs

       BundleConfig类的RegisterBundles可以将我们项目中的多个css样式文件或js脚本文件合并和精简成一个文件,优化页面加载时间,而且也令我们的View看起来整洁些.如      

  @Styles.Render("~/Content/themes/base/css")

       相当于

   <link rel="stylesheet" type="text/css" href="Content/themes/base/jquery.ui.core.css" /> 
   <link rel="stylesheet" type="text/css" href="Content/themes/base/jquery.ui.resizable.css" />
........

     FilterConfig.cs

      FilterConfig类的RegisterGlobalFilters用来注册全局过滤器,项目代码中已经注册了HandleErrorAttribute过滤器,要让它起作用,还需要在根目录的Web.Config中<system.web>节点添加

<customErrors mode="On" defaultRedirect="Error" />

     在Action发生异常时,就会重定向Error.cshtml页面.具体用法可以参考大叔手记(6):巧用ASP.net MVC3里的HandleErrorAttribute.

     还有可能用到的是AuthorizeAttribute,添加全局的授权限制.

 filters.Add(new AuthorizeAttribute());

    RouteConfig.cs

     RouteConfig类的RegisterRoutes用来定义URL路由的.

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    上面代码解析:{resource}.axd 表示后缀名为.axd所有资源 如webresource.axd, {*pathInfo} 表示所有路径.作用是当URL匹配到此路由时,不交给MVC的路由机制处理,而交给标准的ASP.NET处     理程序处理.

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

    这段代码定义了一个路由映射,其中{controller}{action}是MVC中的特定参数,用来匹配控制器和动作的.最后一个参数还设置了默认值,其中UrlParameter.Optional代表的参数可选的意思.产生的效     果就是当我们直接打开主页时,路由管道经过一系列的运作,最终实例化HomeControl,并调用其中的Index方法.

    WebApiConfig.cs

    WebApiConfig.Register用于注册Web API的路由映射.

    定义的方式和正常的MVC路由差不多,不同的是Web API的路由没有{action}指令,它会根据URL的{controller}参数和HTTP动词寻找相应的操作,例如一个get请求,路由机制就会寻找{controller}       中的带get开头的方法.

Content

    里面都是一些CSS样式文件.

Controllers

     MVC模式中的C,Controller主要负责数据输入输出.项目中有两个控制器,AccountController,HomeController.这里主要介绍AccountController.

    [Authorize]
    [InitializeSimpleMembership]
    public class AccountController : Controller
{}

        首先是命名,控制器都是基于命名约定的,后缀必须带Controller.

        [Authorize]特性表示在执行控制器里面的所有操作前必须进行得到授权(也就是要登录),如果没有得到授权则会产生一个HTTP401的状态码,会被FormAuthenticationModule的Onleave捕获,

        然后重定向到Web.config设置的Login页面.

       [InitializeSimpleMembership]初始化SimpleMembership,作用在于确保执行权限相关操作前已经初始化数据库.

       MVC笔记 Controller相关技术    MVC Controller 这两个链接有对Controller有更详细的描述.

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
            {
                return RedirectToLocal(returnUrl);
            }

            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            ModelState.AddModelError("", "提供的用户名或密码不正确。");
            return View(model);
        }

         上面是Login操作的代码.

         [HttpPost]特性表示只处理http动词为Post的请求.

         [AllowAnonymous]特性表示,没有得到授权的情况下也可以执行此操作.

         [ValidateAntiForgeryToken]特性表示令牌验证,配合View的Html.AntiForgeryToken()使用的,主要是为了防止CSRF攻击.

         ModelState.IsValid检查View绑定的model状态是否有效.

         RedirectToLocal 表示登录成功后返回到原来的页面上,此方法也做了防止重定向攻击的措施.

         ModelState.AddModelError("", "提供的用户名或密码不正确。") 将错误信息显示在View中,配合View的Html.ValidationSummary(true)使用.

         return View(model) 返回ViewResult,如果没有指定View名称,则会默认方法名Login作为View名称.

 Filters

        InitializeSimpleMembershipAttribute.cs

        InitializeSimpleMembershipAttribute特性表示在执行操作之前,要对UsersContext进行相关的数据表创建.

       我们可以在SimpleMembershipInitializer的构造函数中添加账号和角色,如   

                   WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

                    if (!WebSecurity.UserExists("czl"))
                    {
                        WebSecurity.CreateUserAndAccount("czl", "123456");
                    }

                    if (!Roles.RoleExists("admin"))
                    {
                        Roles.CreateRole("admin");
                        if (!Roles.IsUserInRole("czl", "admin"))
                        {
                            Roles.AddUserToRole("czl", "admin");
                        }
                    }

Images

     存在网站图片.

Models

    AccountModels.cs

    MVC中的M,Model视图模型.

   public class UsersContext : DbContext
    {
        public UsersContext()
            : base("DefaultConnection")
        {
        }

        public DbSet<UserProfile> UserProfiles { get; set; }
    }

    [Table("UserProfile")]
    public class UserProfile
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }
        public string UserName { get; set; }
    }

       上面使用EF的Code First的方式创建数据表UserProfile.

 public class LoginModel
    {
        [Required]
        [Display(Name = "用户名")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "密码")]
        public string Password { get; set; }

        [Display(Name = "记住我?")]
        public bool RememberMe { get; set; }
    }

     这是其中一个视图模型,用于绑定View.

     [Required]特性表示不能为空,如果为空则在ModelState添加一条错误的提示.

     [DataType(DataType.Password)]特性配合View中html辅助方法可以生成一个类型为password的输入元素.

     [Display(Name = "密码")]特性配合html辅助方法可以生成一个密码的标签.

Scripts

    存放JS脚本文件.

Views

    MVC中的V,视图.和用户交互的页面.

    首先注意到是Views的目录结构,一般都是Controller名字的文件夹下面存放相关的View文件.

    _ViewStart.cshtml

     此视图优先于其他视图运行,一般的作用是给其他视图设置Layout 为_Layout.cshtml.

   Web.config

    这个config只作用于View,可以在<namespaces>节点下添加常用命名空间,这样在绑定模型的时候可以不用写上命名空间.

   Shared

      _Layout.cshtml是母版页面,利用RenderBody()将子View中的内容显示出来.

      _LoginPartial.cshtml登录栏的部分视图,被Html.Partial("_LoginPartial")读取显示.

       Error.cshtml默认的错误显示页面.

    Account和Home

      内容好多.....要掌握Razor语法,Html的扩展方法,Ajax的扩展方法等...

   Global.asax

     Application_Start方法一般执行各种类的注册,主要是App_Start下的类注册,EF的数据库初始化也是放在这里执行的.

Web.config

    要注意的是定义了授权页面的路径,如下.

     <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>

    还有子文件Web.Debug.config和Web.Release.config在不同的模式下,可以对主Web.config的某些设置进行替换.

小结

    暂时先写着这么多,以后有内容再补上.

【MVC】ASP.NET MVC 4项目模板的结构简介

标签:

原文地址:http://www.cnblogs.com/caizl/p/4590642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!