iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
Modern Web

從實作學習ASP.NET Core - 30天的購物網站系列 第 8

【從實作學習ASP.NET Core】Day08 | 後台 | 新增商品類別

今天來處理昨天建立的 Category 商品類別模型
假如說商店有機會擴大經營的話,那商品類別勢必會有所增減,所以我們不想把它寫死,而是讓管理者可以動態管理商品類別,既然如此就需要做一個能夠管理商品類別的頁面了。


新增類別

OnlineShopContext.cs把 Category 的 DbSet 加進去,讓 DBContext 可以對商品類別做資料庫操作

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using OnlineShopCMS.Models;

namespace OnlineShopCMS.Data
{
    public class OnlineShopContext : DbContext
    {
        public OnlineShopContext (DbContextOptions<OnlineShopContext> options)
            : base(options)
        {
        }

        public DbSet<OnlineShopCMS.Models.Product> Product { get; set; }
        public DbSet<OnlineShopCMS.Models.Category> Category { get; set; }
    }
}

然後在ProductsController.cs 新增 CreateCategory() 動作並新增頁面
跟新增商品一樣的寫法只是把對應的模型改為 Category

public IActionResult CreateCategory()
{
    return View();
}

[HttpPost]
public async Task<IActionResult> CreateCategory(Category category)
{
    _context.Category.Add(category);
    await _context.SaveChangesAsync();
    return View();
}

訪問https://localhost:44356/Products/CreateCategory

先新增4個類別:Nintendo Switch 主機Nintendo Switch 遊戲PlayStaion 5 主機PlayStaion 5 遊戲 以便之後方便測試。

在商品的 Create 頁面建立下拉式選單

建好了類別別忘了還要把商品綁定進去,接著要把類別選單加進商品的 Create 頁面
ProductsController.cs 的 Create() 把類別選項用 ViewData 傳進去

public IActionResult Create()
{
    ViewData["Categories"] = new SelectList(_context.Set<Category>(), "Id", "Name");
    return View();
}

接著把前端 Create.cshtml 頁面上該有的欄位補一補

<form asp-action="Create">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <label asp-for="Name" class="control-label"></label>  //商品名稱
        <input asp-for="Name" class="form-control" />
    </div>
    <div class="form-group">
        <label asp-for="Description" class="control-label"></label>  //簡介
        <textarea asp-for="Description" class="form-control"></textarea>
    </div>
    <div class="form-group">
        <label asp-for="Content" class="control-label"></label>  //內容
        <textarea asp-for="Content" class="form-control"></textarea>
    </div>
    <div class="form-group">
        <label asp-for="Price" class="control-label"></label>  //單價
        <input asp-for="Price" class="form-control" />
    </div>
    <div class="form-group">
        <label asp-for="Stock" class="control-label"></label>  //庫存
        <input asp-for="Stock" class="form-control" />
    </div>
    <div class="form-group">
        <label asp-for="Image" class="control-label"></label>  //圖片
        <input type="file" class="form-control-file">
    </div>
    <div class="form-group">
        <label asp-for="CategoryId" class="control-label"></label>  //類別
        <select class="form-control" asp-for="CategoryId" asp-items="ViewBag.Categories"></select>
    </div>
    <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
    </div>
</form>

注意一下類別選項是這樣寫的,用<select>來做選單

<div class="form-group">
    <label class="control-label">Category</label>
    <select class="form-control" asp-for="CategoryId" asp-items="ViewBag.Categories"></select>
</div>

簡單排版後看一下成果,成功讀到選單了

這麼一來在商品建立的時候,就會一併把類別綁定上去囉!


上一篇
【從實作學習ASP.NET Core】Day07 | 後台 | 複雜的商品模型
下一篇
【從實作學習ASP.NET Core】Day09 | 後台 | 圖片上傳與預覽
系列文
從實作學習ASP.NET Core - 30天的購物網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
aldenwang
iT邦新手 5 級 ‧ 2022-08-29 10:53:55

https://ithelp.ithome.com.tw/upload/images/20220829/20151929OBdFNvuuAk.png

您好,先謝謝大大清楚的教學,這裡有問題想向您請教

在訪問https://localhost:(自己的)/Products/CreateCategory
步驟時,出現上圖的錯誤訊息,看起來是view沒有東西呈現?請問該如何解決

另外OnlineShopContext.cs這個檔案是在Data的資料夾中嗎,我的檔案名稱是OnlineShopCMSContext.cs,應該是它吧?

煩請幫忙解決,謝謝

aldenwang iT邦新手 5 級 ‧ 2022-08-29 11:30:17 檢舉

我要留言

立即登入留言