ASP.NET MVC入門教程(二)html
本部分主要實現文章控制器的建立與列表頁、內容頁的設計與實現數據庫
1、佈局頁介紹瀏覽器
1.佈局頁介紹佈局
在全部的網頁中,有不少內容在全部的頁面中都是相同的,好比Logo、導航、版權信息等部分,在ASP.NET Form時,採用母版頁的方法實現,在MVC中,採用了佈局頁的方法。網站
佈局頁在Views下的Shared下,其項目默認的佈局頁是_Layout.cshtml,佈局模板容許你在頁面的某個地方指定HTML容器,而後在網站中多個頁面中應用。ui
@RenderBody()。是一個佔位符,即全部使用了該佈局頁的內容頁,其內容會被顯示在這個地方。spa
@RenderSection("scripts", required: false),這個是爲了在子頁面中引用JS,至關於在佈局頁中定義了一個佔位符,在子頁面中去填充這個佔位。在子頁面中使用如下方式來引用js.net
@section scripts{}設計
在本教程中,不對佈局頁進行修改,只修改其超連接部分,修改部分以下code
<ul class="nav navbar-nav"> <li>@Html.ActionLink("主頁", "Index", "Home")</li> <li>@Html.ActionLink("關於", "About", "Home")</li> <li>@Html.ActionLink("聯繫方式", "Contact", "Home")</li> <li>@Html.ActionLink("文章列表","Index","Article")</li> <li>@Html.ActionLink("發表文章","Create","Article")</li> </ul>
2、建立Article控制器
1.建立Article控制器
在Controllers文件夾上右鍵單擊,選擇「添加"、「控制器」,選中「包含讀/寫操做的MVC5控制器」,點擊添加,
控制器名稱修改成Article
點擊「添加」後,生成的代碼以下:
public class ArticleController : Controller { // GET: Article public ActionResult Index() { return View(); } // GET: Article/Details/5 public ActionResult Details(int id) { return View(); } // GET: Article/Create public ActionResult Create() { return View(); } // POST: Article/Create [HttpPost] public ActionResult Create(FormCollection collection) { try { // TODO: Add insert logic here return RedirectToAction("Index"); } catch { return View(); } } // GET: Article/Edit/5 public ActionResult Edit(int id) { return View(); } // POST: Article/Edit/5 [HttpPost] public ActionResult Edit(int id, FormCollection collection) { try { // TODO: Add update logic here return RedirectToAction("Index"); } catch { return View(); } } // GET: Article/Delete/5 public ActionResult Delete(int id) { return View(); } // POST: Article/Delete/5 [HttpPost] public ActionResult Delete(int id, FormCollection collection) { try { // TODO: Add delete logic here return RedirectToAction("Index"); } catch { return View(); } } }
其中的方法,後面將會逐一介紹,此處不作解釋
3、列表頁的實現
1.Index方法
Index方法主要用來實現文章的列表頁,在該方法下,將訪問數據庫並將獲得的結果傳遞給視圖進行顯示。
1)引入命名空間
using MyStudy.Models;
2)在Articlecontroller類內部建立數據上下文,即EF容器對象
public class ArticleController : Controller { //建立數據上下文 private MyEFContainer db = new MyEFContainer();
3)建立視圖模型
在Models文件夾上右鍵單擊,選擇「添加」、「類」
其代碼以下
using System; namespace MyStudy.Models { public class ArticleListViewModel { public int id { get; set; } public string title { get; set; } public DateTime publishDate { get; set; } } }
4)在Article控制器的Index方法中,輸入如下代碼
public ActionResult Index() { //1.執行數據庫查詢,取得全部文章信息 List<tb_article> tArticles = db.tb_article .OrderByDescending(m => m.PublishDate) .ToList(); //2.轉換爲視圖模型 List<ArticleListViewModel> articles = new List<ArticleListViewModel>(); foreach(var item in tArticles) { ArticleListViewModel article = new ArticleListViewModel(); article.id = item.Id; article.title = item.Name; article.publishDate =(DateTime) item.PublishDate; articles.Add(article); } //經過模型綁定將數據傳遞給視圖 return View(articles); }
5)建立視圖層
在Index方法內,右鍵單擊選擇」添加視圖「,設置以下
點擊」添加「後,系統將會根據你所選擇的模型類、與模板,自動建立視圖
6)運行,查看列表頁,
,在瀏覽器中顯示以下結果
該頁面中,文章的標題與發表日期上方的表頭顯示,title和publishDate,並非中文的,如今咱們經過修改視圖模型讓其顯示爲相應的中文
7)修改視圖模型
首先引入命名空間 using System.ComponentModel.DataAnnotations;
而後修改以下:
using System; using System.ComponentModel.DataAnnotations; namespace MyStudy.Models { public class ArticleListViewModel { [Display(Name ="編號")] public int id { get; set; } [Display(Name ="文章標題")] public string title { get; set; } [Display(Name ="發表日期")] public DateTime publishDate { get; set; } } }
再次運行,頁面顯示以下:
8)修改列表頁
將如下代碼刪除
<h2>Index</h2> <p> @Html.ActionLink("Create New", "Create") </p>
將其後的Edit、Details、Delete修改以下
@Html.ActionLink("編輯文章", "Edit", new { id=item.id }) | @Html.ActionLink("文章內容", "Details", new { id=item.id }) | @Html.ActionLink("刪除文章", "Delete", new { id=item.id })
4、內容頁的實現
1.Article控制器下的Details方法,爲文章內容頁,其代碼以下
public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } tb_article article = db.tb_article.Find(id); if (article == null) { return new HttpStatusCodeResult(HttpStatusCode.NotFound); } return View(article); }
首先判斷從上一個視圖傳遞過來的id值是否爲空,若是爲空,則返回一個錯誤的請求,不然,根據id查找數據庫中的記錄,再判斷查找到的結果是否爲null,若是爲空則表示沒有該記錄,返回一個404錯誤。不然經過模型綁定,將數據傳遞給視圖顯示。
2.利用模板建立視圖
在Details方法內右鍵單擊,選擇「添加視圖」,設置以下
3.運行、在列表頁中,點擊文章內容、瀏覽器中顯示以下結果
4.對內容頁進行簡單修改,以下
@model MyStudy.Models.tb_article @{ ViewBag.Title = "Details"; Layout = "~/Views/Shared/_Layout.cshtml"; } <div class="row"> <h3 class="text-center">@Model.Name</h3> <h5 class="text-center">@Model.Author</h5> <p> @Model.Content </p> <h5 class="text-right">@Model.PublishDate</h5> </div> <p> @Html.ActionLink("返回列表", "Index") </p>