iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
SideProject30

我想自己刻部落格系列 第 14

新增文章功能、首頁顯示功能

  • 分享至 

  • xImage
  •  

上篇做完 PostService

這篇做新增文章功能、首頁顯示功能。
詳細可以看 GitHub

DI 註冊

要使用 DI 來注入 PostService,一定要去 Program.cs 註冊。這邊我補上介面來註冊,使相依於介面。

PostService.cs

public class PostService : IPostService

Program.cs

builder.Services.AddTransient<IPostService, PostService>();

首頁顯示功能

我們先只要直接對 HomeController 的 Index 稍作修改,加上頁碼,拉出前十筆資料顯示在首頁就可以了

private readonly IPostService _postService;

public HomeController(IPostService postService)
{
    _postService = postService;
}

public IActionResult Index(int p = 1)
{
    var posts = _postService.GetAll(p, 10);
    return View(posts);
}

HTML 的部分,我使用 BootStrap 的卡片元件來建立。從 Controller 傳來的資料是複數,故 model 選告是 IEnumerable<Post>

並在首頁上留下新增文章連結,對應的 AdminController 的 CreatePost()

Index.cshtml

@model IEnumerable<Post>
@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <h1 class="display-4">長庚的部落格測試</h1>
 
    <a asp-action="CreatePost" asp-controller="Admin">新增文章</a>
    <br />
    @foreach (var item in Model)
    {
        <div class="card mt-3" style="width: 18rem;">
            <div class="card-body">
                <h5 class="card-title">@item.Title</h5>
                <h6 class="card-subtitle mb-2 text-muted">
                    @item.PublishDate.ToShortDateString()
                </h6>
                <p class="card-text">@item.FilteredContent</p>
            </div>
        </div>
    }
</div>

新增文章功能

建立 AdminController ,並建構式注入 PostService , 並建立兩個 CreatePost 的 Action ,做為顯示新增頁與接受新增資料用。接受端需標上 [HttpPost],新增文章後就會回到首頁。
這邊我先暫時省略資料驗證的部分,直接做新增功能。

public class AdminController : Controller
{
    private readonly IPostService _postService;

    public AdminController(IPostService postService)
    {
        _postService = postService;
    }
    public IActionResult CreatePost()
    {
        return View();
    }

    [HttpPost]
    public IActionResult CreatePost(Post post)
    {
        _postService.CreateAsync(post);
        return RedirectToAction("Index","Home");
    }
}

CreatePost的cshtml,使用Visual Studio自動產生樣板功能。
這功能一部分會用到 Microsoft.EntityFrameworkCore.Design
案沒有安裝,就沒辦法自動產生 HTML 樣板,請先使用 NuGet 安裝以下工具:

Microsoft.EntityFrameworkCore.Design

安裝完之後,對著 CreatePost 按右鍵 -> 新增檢視 -> Razor 檢視 -> 選擇 Create 範本、 Post 模型如下設定就可以產生 HTML 。
https://ithelp.ithome.com.tw/upload/images/20230929/20120420AwcWE9aIc6.png

https://ithelp.ithome.com.tw/upload/images/20230929/20120420mjsL9GOO3C.png

因為不是新增資料時有些欄位都是後端處理,故畫面中有拔掉一些欄位
https://ithelp.ithome.com.tw/upload/images/20230929/20120420Hrd3hiEkcD.png

新增完回到首頁,就可以看到新增成功的結果了
https://ithelp.ithome.com.tw/upload/images/20230929/201204207lTHdf2bKJ.png

程式碼可以看 GitHub


上一篇
建立 Post Service
下一篇
使用 Markdown 作為文字編輯器
系列文
我想自己刻部落格31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言