康廷數位購物網第四篇,說明建立分類商品的瀏覽功能,歡迎閱讀
原文:http://www.kangting.tw/2014/10/blog-post_6.html
在已經建立好的Creategories 與 Products資料表中,建立測試資料。
分類(Categories)資料表中,建立了五種分類。
商品資料表(Prodcuts)中的每一項商均有其所屬的分類,以CategoryId 進行關聯。現在開啟Controllers/HomeController.cs 檔案,修改內容如下:
namespace Kangting.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
KangtingEntities db = new KangtingEntities();
var categories = db.Categories.ToList();
return View(categories);
}
public ActionResult Browse(int categoryId)
{
// 取得分類商品
return View();
}
}
}
Index() 方法取得分類表的所有內容,並且將其回傳,另外建立一個Browse() 方法,其接受一個 int 參數,暫時保留內容為白空,後續再完成其內容。開啟 Views/Home/Index.cshtml ,輸入以下的內容:
@model IEnumerable<Kangting.Models.Category>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@if (Model.Count()==0)
{
<p>目前無任何商品</p>
}else{
foreach (var category in Model)
{
<p><label>@category.CategoryId</label>
<span><a href="Browse?categoryId=@category.CategoryId">@category.Name</a>
</span></p>
}
}
foreach 迴圈逐步取出每一筆分類項目,建立 a 連結,於超連結中,指定 Browse 控制器連接所屬的分類編號 CategoryId。瀏覽Views/Home/Index.cshtml網頁內容,得到以下的結果:
列舉Categories 資料表中目前包含的所有分類項目,點選任何一個分類名稱超連結(例如電腦組件),出現以下的結果:
其中的網址列內容如下:
http://localhost:52143/Home/Browse?categoryId=1000
由於Home控制器中的 Browse 動作還未建立對應的View 檔案,因此傳入的編號 1000 並不會有任何作用,結果是找不到對應內容的錯誤網頁。 重新回到 Controllers/HomeController.cs 檔案,修改其中的動作方法Browse()如下:
public ActionResult Browse(int categoryId)
{
KangtingEntities db = new KangtingEntities();
var categroy =
db.Categories.Include("Products").
Single(x => x.CategoryId == categoryId);
return View(categroy);
}
根據傳入的分類編號,透過 LINQ 取出商品資料表中此分類的商品項目集合將其回傳。緊接著建立此動作方法的對應檢視 Views/Home/ Browse.cshtml ,內容列舉如下:
@model Kangting.Models.Category
@{
ViewBag.Title = "Browse";
}
<h2>分類: @Model.Name</h2>
<table>
<thead>
<tr>
<th>商品編號</th>
<th>商品名稱</th>
<th>定價</th>
</tr>
</thead>
<tbody>
@foreach (var product in Model.Products)
{
<tr>
<td>@product.ProductId</td>
<td>@product.Name</td>
<td>@product.Price</td>
</tr>
}
</tbody>
</table>
其中透過 foreac 迴圈,搭配 table 標籤,建立商品清單,現在重新瀏覽Views/Home/Index.cshtml網頁內容,點選任何一個分類名稱超連結(例如電腦週邊),出現以下的結果: