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

  今天开始学习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是一个主版页面:


<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>© @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.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.Models.MvcGuestBookContext>());

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

你可能感兴趣的:(ASP-NET)