ASP.NET MVC入門教程(二)文章列表頁、內容頁的實現

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>
相關文章
相關標籤/搜索