ASP.NET MVC4应用程序基本结构和执行流程---ASP.NET学习笔记(1)

来源:互联网 发布:mac常用的软件 编辑:程序博客网 时间:2024/05/16 04:11

  今天开始学习ASP.NET WEB应用,跟的书是《ASP.NET MVC4开发指南》。感觉这本书讲解的较为清晰,不是抓住一个点长篇大论一番或是直接列出长长的字典性质的列表,而是对于能够拓展的地方给予链接,更符合指南的性质。

1.文档路径:APS.NET MVC项目目录中对文档的查找是通过”网址路由“来查找的,APP_Start\RouteConfig.cs 这个文件定义了文档查找的方法:

namespace MvcGuestBook{    public class RouteConfig    {        public static void RegisterRoutes(RouteCollection routes)        {            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");            routes.MapRoute(                name: "Default",                url: "{controller}/{action}/{id}",                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }            );        }    }}

IgnoreRoute: ASP.NET不处理的网址格式
MapRoute:定义ASP.NET 网址路由的主要方式,其中参数:

  1. name:路由名称
  2. url:定义网址的格式,例如代码中的{controller}/{action}/{id},就是控制器/动作/路由值
  3. defaults:url中各个格式的默认值
    根据上面代码中的设置我们知道,该WEB应用一开始运行时会先找controller中的Home控制器,然后寻找并执行其中的About方法(公开的),然而最后一个默认路由就是我们 第一次进入localhost时跳出的默认页面地址。
    2.主版页面
        ~/View/_ViewStart.cshtml文件会在所有View运行之前预先装入,它的默认内容为:
@{    Layout = "~/Views/Shared/_Layout.cshtml";}

其中指示的~/Views/Shared/_Layout.cshtml是一个主版页面:

<!DOCTYPE html><html lang="zh">    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>        <meta charset="utf-8" />        <title>@ViewBag.Title - 我的 ASP.NET MVC 应用程序</title>        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />        <meta name="viewport" content="width=device-width" />        @Styles.Render("~/Content/css")        @Scripts.Render("~/bundles/modernizr")    </head>    <body>        <header>            <div class="content-wrapper">                <div class="float-left">                    <p class="site-title">@Html.ActionLink("将你的徽标放置在此处", "Index", "Home")</p>                </div>                <div class="float-right">                    <section id="login">                        @Html.Partial("_LoginPartial")                    </section>                    <nav>                        <ul id="menu">                            <li>@Html.ActionLink("主页", "Index", "Home")</li>                            <li>@Html.ActionLink("关于", "About", "Home")</li>                            <li>@Html.ActionLink("联系方式", "Contact", "Home")</li>                        </ul>                    </nav>                </div>            </div>        </header>        <div id="body">            @RenderSection("featured", required: false)            <section class="content-wrapper main-content clear-fix">                @RenderBody()            </section>        </div>        <footer>            <div class="content-wrapper">                <div class="float-left">                    <p>&copy; @DateTime.Now.Year - 我的 ASP.NET MVC 应用程序</p>                </div>            </div>        </footer>        @Scripts.Render("~/bundles/jquery")        @RenderSection("scripts", required: false)    </body></html>

View目录下所有的视图都会装入这个主版页面中。
3.创建数据模型
在Model目录下创建一个类后,为该类设置字段:

    public class GuestBook    {        public int Id { set; get; }        public string name { set; get; }        public string email { set; get; }        public string content { set; get; }    }

4.创建控制器、视图

  1. 在Controller目录下选择创建控制器  2. 选择"包含读/写操作和视图的MVC控制器(使用Entity FrameWork)"  3. 为控制器添加模型类  4. 为数据添加上下文类

其中上下文类也创建在Model目录下
5.数据库文档
    如果应用程序被执行过后,在APP_DATA目录下会有隐藏的数据库文档(在资源管理器工具条上点击”显示所有文件”后即可看到)
6.View方法
    View()方法是Controller基类的一个辅助方法,有8个重载,用于传递参数给View。
7.@model模型声明
    在View(视图)中的第一行,会有类似的模型声明:

@model IEnumerable<MvcGuestBook.Models.GuestBook>

该声明的作用将MvcGuestBook.Models.GuestBook这个对象作为整个视图的主要模型。例如该视图中的某一节点用法:

 <strong>姓名</strong>:@Html.DisplayFor(modelItem => item.name)

该用法中的modelItem就是@model声明的主类型,其中的字段都是主模型提供的字段。
8.Html.ActionLink
    语句

 @Html.ActionLink("留下足迹", "Write")

是一句Razor语法,该语法嵌入在HTML标签中,在解析后输出指定的HTML文本。上面的语句表示超链接功能,第一个参数是超链接标题,第二个链接表示主模型对应的Controller控制器中对应的方法名,也就是点击该超链接后,会交给控制器进行处理。例如语句中的Write方法,在GuestBookContrller类中为:

      // GET: /GuestBook/Create        public ActionResult Write()        {            return View();        }        //        // POST: /GuestBook/Write        [HttpPost]        public ActionResult Write(GuestBook guestbook)        {            if (ModelState.IsValid)            {                db.GuestBooks.Add(guestbook);                db.SaveChanges();                return RedirectToAction("Index");            }            return View(guestbook);        }

我们重载了两个Write类,这个时候就要使用动作过滤器来选择对应的方法。第一个方法是HTTP GET请求传送来时调用的,而第二个方法是HTTP POST请求传来时调用的。我们通过link过来的请求就是GET请求,所以调用第一个方法。
9.字段验证
    ASP.NET提供了简便的字段验证方法,在Model中定义后即可:
1.导入System.ComponentModel.DataAnnotations;
2.在字段前注释为[Required]
例如:

   [Required]   [DisplayName("电子邮件地址")]   public string email { set; get; }`

10.修改Model后重建数据库
    如果数据类型(Model)字段被修改之后,那么数据库就要进行相应的调整。如果在修改完Model后直接运行WEB应用程序,那么会得到“支持“MvcGuestBookContext”上下文的模型已在数据库创建后发生更改”这样的异常报错,方法是根据MvcGuestBookContext这个上下文类的注释进行修正:
将代码

System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<MvcGuestBook.Models.MvcGuestBookContext>());

添加入Global.asax 文件中的 Application_Start 方法中去,即可在更改数据模型后就自动重新生成数据库。

0 0