今天开始学习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 网址路由的主要方式,其中参数:
@{
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 方法中去,即可在更改数据模型后就自动重新生成数据库。