https://laihao2.com/Home/Contact
資料表參考昨天~
Controllers裡面的Entities>這裡跟前面的就不同,因為有帶入資料表
public ActionResult Contact(string category = null)
{
var data = _db.ChineseJapaneseTable.AsQueryable();
if (!string.IsNullOrEmpty(category))
{
data = data.Where(x => x.Category == category);
}
// 返回所有數據或者篩選後的數據
return View(data.ToList());
}
解釋程式碼
這段 C# 代碼定義了一個 ASP.NET MVC 控制器中的 Contact
動作,用於根據 category
參數查詢並返回數據庫中的數據。讓我們逐步解釋每個部分的功能:
方法定義:
public ActionResult Contact(string category = null)
Contact
的方法,返回一個 ActionResult
,通常是一個視圖。category
是一個可選參數,如果沒有提供,默認為 null
。查詢數據庫:
var data = _db.ChineseJapaneseTable.AsQueryable();
_db.ChineseJapaneseTable
指的是數據庫中 ChineseJapaneseTable
表。AsQueryable()
將數據轉換為可查詢的對象,允許之後添加過濾條件。根據 category
參數進行篩選:
if (!string.IsNullOrEmpty(category))
{
data = data.Where(x => x.Category == category);
}
if (!string.IsNullOrEmpty(category))
檢查是否提供了 category
參數,如果提供了且不為空:
data = data.Where(x => x.Category == category)
會過濾 ChineseJapaneseTable
表中的數據,返回 Category
等於指定 category
的數據。返回數據:
return View(data.ToList());
data.ToList()
將查詢結果轉換為列表。return View(data.ToList())
將該數據列表傳遞給視圖,從而在前端展示查詢結果。category
參數,篩選數據庫中 ChineseJapaneseTable
表的記錄,並返回符合條件的數據。如果沒有提供 category
參數,則返回所有記錄。產生畫面View程式碼
@model IEnumerable<WebApplication5.Models.ChineseJapaneseTable>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Contact";
}
@*@{
ViewBag.Title = "Contact";
}*@
<h2>內容包含:</h2>
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>中文和日文資料表</title>
<style>
table {
width: 100%;
border-collapse: collapse;
}
th, td {
border: 1px solid black;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
</style>
</head>
<body>
<h1>中文和日文資料表</h1>
<h2>
分類:
<a href="@Url.Action("Contact")">所有</a> |
<a href="@Url.Action("Contact", new { category = "入境審查" })">入境審查</a> |
<a href="@Url.Action("Contact", new { category = "N2考試內容" })">N2考試內容</a> |
<a href="@Url.Action("Contact", new { category = "訂單" })">訂單</a> |
<a href="@Url.Action("Contact", new { category = "職場日文" })">職場日文</a> |
<a href="@Url.Action("Contact", new { category = "生活日語" })">生活日語</a> |
<a href="@Url.Action("Contact", new { category = "俚語" })">俚語</a> |
<a href="@Url.Action("Contact", new { category = "格言" })">格言</a> |
<a href="@Url.Action("Contact", new { category = "其他" })">其他</a> |
<a href="@Url.Action("Contact", new { category = "買東西" })">買東西</a>
</h2>
<table>
<thead>
@*
<tr>
<th>序號</th>
<th>中文</th>
<th>日文</th>
<th>備註</th>
<th>分類</th>
</tr>*@
<tr>
<th>@Html.DisplayNameFor(model => model.Chinese)</th>
<th>@Html.DisplayNameFor(model => model.Japanese)</th>
<th>@Html.DisplayNameFor(model => model.Note)</th>
<th>@Html.DisplayNameFor(model => model.Category)</th>
<th>操作</th> <!-- 新增一個列用於操作 -->
</tr>
</thead>
@*
<tbody>
<tr>
<td>1</td>
<td>你好</td>
<td>こんにちは</td>
<td>例子1</td>
<td>生活日語</td>
</tr>
<tr>
<td>2</td>
<td>再見</td>
<td>さようなら</td>
<td>例子2</td>
<td>生活日語</td>
</tr>
<!-- 你可以添加更多行 -->
</tbody>*@
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.Chinese)</td>
<td>@Html.DisplayFor(modelItem => item.Japanese)</td>
<td>@Html.DisplayFor(modelItem => item.Note)</td>
<td>@Html.DisplayFor(modelItem => item.Category)</td>
<td>
<!-- 新增 "編輯" 按鈕,鏈接到 Contact_Edit -->
@Html.ActionLink("編輯", "Contact_Edit", new { id = item.Id }, new { @class = "btn btn-primary" })
</td>
</tr>
}
</tbody>
</table>
</body>
</html>
解釋程式碼
這段代碼是一個 ASP.NET MVC 視圖(Razor 語法),用於顯示 ChineseJapaneseTable
數據表中的內容,包含篩選、展示以及“編輯”功能。以下是逐步解析:
@model IEnumerable<WebApplication5.Models.ChineseJapaneseTable>
IEnumerable<WebApplication5.Models.ChineseJapaneseTable>
,即傳遞給視圖的模型是一個 ChineseJapaneseTable
實例的集合。@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Contact";
}
Layout
表示該視圖使用 _Layout.cshtml
作為布局文件,用於共享頁面頭部、腳部等。ViewBag.Title = "Contact";
設置頁面標題為 "Contact"。<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>中文和日文資料表</title>
<style>
table {
width: 100%;
border-collapse: collapse;
}
th, td {
border: 1px solid black;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
</style>
</head>
<h2>
分類:
<a href="@Url.Action("Contact")">所有</a> |
<a href="@Url.Action("Contact", new { category = "入境審查" })">入境審查</a> |
<a href="@Url.Action("Contact", new { category = "N2考試內容" })">N2考試內容</a> |
...
</h2>
category
進行數據篩選。點擊某個分類鏈接時,會發送帶有 category
參數的請求到 Contact
方法,實現數據過濾。<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.Chinese)</th>
<th>@Html.DisplayNameFor(model => model.Japanese)</th>
<th>@Html.DisplayNameFor(model => model.Note)</th>
<th>@Html.DisplayNameFor(model => model.Category)</th>
<th>操作</th> <!-- 新增一個列用於操作 -->
</tr>
</thead>
@Html.DisplayNameFor
來自動顯示每個字段的名稱(如 “中文”、”日文” 等),根據模型的屬性名稱生成表頭。操作
是為操作按鈕(如“編輯”)預留的。<tbody>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.Chinese)</td>
<td>@Html.DisplayFor(modelItem => item.Japanese)</td>
<td>@Html.DisplayFor(modelItem => item.Note)</td>
<td>@Html.DisplayFor(modelItem => item.Category)</td>
<td>
@Html.ActionLink("編輯", "Contact_Edit", new { id = item.Id }, new { @class = "btn btn-primary" })
</td>
</tr>
}
</tbody>
@foreach
循環遍歷 Model
,即從控制器傳遞過來的 ChineseJapaneseTable
數據集合。@Html.DisplayFor
用於顯示每條記錄的屬性值,包括中文、日文、備注和分類。@Html.ActionLink
生成鏈接,指向 Contact_Edit
動作,並傳遞當前記錄的 id
,允許用戶編輯相應的條目。@Html.ActionLink("編輯", "Contact_Edit", new { id = item.Id }, new { @class = "btn btn-primary" })
Contact_Edit
動作,並傳遞 id
參數以識別具體要編輯的記錄。按鈕的樣式類被設置為 btn btn-primary
,可以與 CSS 框架(如 Bootstrap)結合使用來提供按鈕樣式。加上資料表後的: 實用日語 修改
https://laihao2.com/Home/Contact_Edit/1
資料表參考昨天~
Controllers裡面的Entities>
public ActionResult Contact_Edit(int id)
{
ViewBag.Layout = "~/Views/Shared/_Layout.cshtml";
// 根據 ID 獲取對應的 ChineseJapaneseTable 條目
var cus = _db.ChineseJapaneseTable.Find(id);
if (cus == null)
{
return HttpNotFound(); // 如果找不到相應的記錄,返回 404
}
return View(cus); // 傳遞模型到視圖
}
[HttpPost]
public ActionResult Contact_Edit(ChineseJapaneseTable cus)
{
if (ModelState.IsValid)
{
// 更新現有的數據庫條目
_db.Entry(cus).State = System.Data.Entity.EntityState.Modified;
_db.SaveChanges(); // 保存更改到數據庫
return RedirectToAction("Contact"); // 完成後重定向到 Contact 頁面或其他頁面
}
return View(cus); // 如果模型驗證失敗,返回表單視圖並顯示錯誤信息
}
解釋程式碼
這段代碼定義了 ASP.NET MVC 中的 Contact_Edit
動作方法,提供了對 ChineseJapaneseTable
數據表記錄的編輯功能。它分為兩個部分:GET 請求用於加載並顯示編輯頁面,POST 請求用於提交編輯後的數據並保存更改。
Contact_Edit
方法):public ActionResult Contact_Edit(int id)
{
ViewBag.Layout = "~/Views/Shared/_Layout.cshtml";
// 根據 ID 獲取對應的 ChineseJapaneseTable 條目
var cus = _db.ChineseJapaneseTable.Find(id);
if (cus == null)
{
return HttpNotFound(); // 如果找不到相應的記錄,返回 404
}
return View(cus); // 傳遞模型到視圖
}
id
作為參數,這是要編輯的記錄的唯一標識符。ViewBag.Layout
:設置布局文件,指定使用共享布局 _Layout.cshtml
。var cus = _db.ChineseJapaneseTable.Find(id);
根據傳遞的 id
在數據庫 ChineseJapaneseTable
表中查找相應的記錄。if (cus == null)
判斷是否找到相應記錄。如果未找到,返回 HttpNotFound()
,顯示 404 錯誤頁面。return View(cus);
將查找到的記錄(模型)傳遞給視圖,在頁面上顯示供用戶編輯。Contact_Edit
方法):[HttpPost]
public ActionResult Contact_Edit(ChineseJapaneseTable cus)
{
if (ModelState.IsValid)
{
// 更新現有的數據庫條目
_db.Entry(cus).State = System.Data.Entity.EntityState.Modified;
_db.SaveChanges(); // 保存更改到數據庫
return RedirectToAction("Contact"); // 完成後重定向到 Contact 頁面或其他頁面
}
return View(cus); // 如果模型驗證失敗,返回表單視圖並顯示錯誤信息
}
POST
方法,接受一個 ChineseJapaneseTable
類型的參數 cus
,即用戶在編輯表單中修改後的數據。if (ModelState.IsValid)
檢查模型的狀態是否有效。這個驗證通常包括必填字段檢查、數據格式正確性等。 _db.Entry(cus).State = System.Data.Entity.EntityState.Modified;
將傳遞的 cus
實體標記為“修改”狀態。_db.SaveChanges();
將更改保存到數據庫。return RedirectToAction("Contact");
完成編輯後,重定向到 Contact
頁面,顯示更新後的數據列表。return View(cus);
,並顯示表單中的錯誤信息。id
獲取要編輯的記錄,加載編輯視圖讓用戶進行修改。如果記錄不存在,返回 404 錯誤。Contact
頁面,否則重新顯示編輯表單並顯示驗證錯誤。產生畫面View程式碼
@model WebApplication5.Models.ChineseJapaneseTable
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@{
ViewBag.Title = "Contact_Edit";
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Contact_Edit</title>
</head>
<body>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>中文和日文資料表:內容</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
<div class="form-group">
@Html.LabelFor(model => model.Chinese, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Chinese, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Chinese, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Japanese, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Japanese, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Japanese, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Note, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Note, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Note, "", new { @class = "text-danger" })
</div>
</div>
@*<div class="form-group">
@Html.LabelFor(model => model.Category, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Category, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Category, "", new { @class = "text-danger" })
</div>
</div>*@
<div class="form-group">
@Html.LabelFor(model => model.Category, htmlAttributes: new { @class = "control-label col-md-2" })
@{
var listItemsCategory = new List<SelectListItem>
{
new SelectListItem { Text = "請選擇", Value = "請選擇", Selected = true },
new SelectListItem { Text = "入境審查", Value = "入境審查" },
new SelectListItem { Text = "N2考試內容", Value = "N2考試內容" },
new SelectListItem { Text = "訂單", Value = "訂單" },
new SelectListItem { Text = "職場日文", Value = "職場日文" },
new SelectListItem { Text = "生活日語", Value = "生活日語" },
new SelectListItem { Text = "俚語", Value = "俚語" },
new SelectListItem { Text = "格言", Value = "格言" },
new SelectListItem { Text = "其他", Value = "其他" },
new SelectListItem { Text = "買東西", Value = "買東西" }
};
}
@Html.DropDownList("Category", listItemsCategory, htmlAttributes: new { @class = "form-control", style = "width: 100%;" })
@Html.ValidationMessageFor(model => model.Category, "", new { @class = "text-danger" })
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="存檔" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("回到總表", "Contact")
</div>
</body>
</html>
解釋程式碼
這段代碼定義了一個視圖,用於編輯 ChineseJapaneseTable
中的記錄。它包含一個 HTML 表單,用戶可以在表單中輸入、修改數據並提交。以下是代碼的詳細解釋:
@model WebApplication5.Models.ChineseJapaneseTable
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@{
ViewBag.Title = "Contact_Edit";
}
@model
:指定視圖的模型類型為 ChineseJapaneseTable
,這樣視圖可以訪問該模型的屬性。Layout
:定義了該視圖的布局文件為 _Layout.cshtml
,這是一個共享的布局。ViewBag.Title
:設置頁面的標題為 "Contact_Edit"
。@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
Html.BeginForm()
:生成一個 POST
請求的表單,表單的目標是當前控制器的 Contact_Edit
動作。@Html.AntiForgeryToken()
:生成一個防偽令牌,確保表單提交的安全性,防止跨站請求偽造(CSRF)攻擊。<div class="form-horizontal">
<h4>中文和日文資料表:內容</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
form-horizontal
:使用 Bootstrap 的水平表單布局。@Html.ValidationSummary
:顯示模型驗證的錯誤摘要,錯誤消息會以紅色 (text-danger
) 樣式顯示。@Html.HiddenFor(model => model.Id)
:隱藏字段,用於傳遞 Id
,這個字段不會顯示給用戶,但提交時會一起傳遞。<div class="form-group">
@Html.LabelFor(model => model.Chinese, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Chinese, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Chinese, "", new { @class = "text-danger" })
</div>
</div>
@Html.LabelFor
:生成一個 label
標簽,綁定到模型的 Chinese
屬性。@Html.EditorFor
:生成一個輸入框,讓用戶輸入或修改中文內容。@Html.ValidationMessageFor
:如果輸入不符合驗證規則(如必填項),在這里顯示錯誤消息。與中文字段類似,日文和備注字段同樣使用 LabelFor
、EditorFor
和 ValidationMessageFor
,分別生成標簽、輸入框和驗證錯誤提示。
<div class="form-group">
@Html.LabelFor(model => model.Category, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownList("Category", listItemsCategory, htmlAttributes: new { @class = "form-control", style = "width: 100%;" })
@Html.ValidationMessageFor(model => model.Category, "", new { @class = "text-danger" })
</div>
DropDownList
:這里使用了一個下拉列表來選擇分類。選項被預先定義為一個 SelectListItem
列表,並傳遞給下拉菜單。選項包括 "入境審查"
, "N2考試內容"
, "訂單"
, "職場日文"
等等。ValidationMessageFor
:如果用戶沒有選擇有效的分類,將在這里顯示驗證錯誤信息。<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="存檔" class="btn btn-default" />
</div>
</div>
<div>
@Html.ActionLink("回到總表", "Contact")
</div>
<input type="submit">
:生成提交按鈕,點擊後將表單數據提交到服務器。@Html.ActionLink
:生成一個鏈接,點擊後將跳轉到 Contact
頁面(顯示總表的頁面)。@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
jQuery
和 jQuery.validate
的腳本包,確保表單驗證等功能正常工作。ChineseJapaneseTable
數據的表單。POST
請求提交數據,並包含驗證功能以確保輸入的合法性。大家明年見~