今天來了解一下Scaffold幫我們產生的Index
透過範本所建立的Index檢視頁面,會看到如下的內容
@model IEnumerable<FirstProject.Models.ModelName>
這一行是用來宣告模型,IEnumerable是一個集合物件,所以我們的View所參考的是FirstProject.Models.ModelName這個模型的集合物件,Controller傳到View的模型資料也必須與這個View所宣告的型別相同
@{
ViewBag.Title = "Index";
}
這一段是設定Title名稱給主版使用也就是在~/Views/Shared/_Layout.cshtml
@{}所代表的意思之後幾天會說明,今天先探討結構部分
@Html.ActionLink("Create New", "Create")
這一段代表建立一個連結,第一個參數是連結名稱,第二個參數是Create的Action
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.姓名)
</th>
<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<th>
@Html.DisplayNameFor(model => model.內容)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.姓名)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.內容)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.id }) |
@Html.ActionLink("Details", "Details", new { id=item.id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.id })
</td>
</tr>
}
</table>
因為是列表的頁面,所以自動會使用table樣式搭配foreach迴圈逐筆取出,形成一個列表
@Html.DisplayNameFor():
輸出特定的欄位名稱等同於table裡的th
@foreach(var item in Model):
這裡的Model代表從Controller傳過來的資料,所以這個Model的型別一定等於第一行所宣告的@model IEnumerable<FirstProject.Models.ModelName>的型別
@Html.DisplayFor():
用來取得所傳入的模型資料,裡面的modelItem也代表著所參考的Model,modelItem是可以更改名稱的
例如更改成(m=>item.內容)
@Html.ActionLink():
最後所看到的三組@Html.ActionLink()分別連結至Edit、Details、Delete,第三組參數是要傳到對應的Action的參數