ASP.Net MVC開發基礎學習筆記(9):檢視詳情、編輯資料、刪除資料
前言
所謂萬事開頭難,前面用兩節介紹了查詢頁面,一節介紹了建立資料。由於前面做了大量的鋪墊,本節就能順利的將檢視詳情、編輯資料、刪除資料在一節中全部介紹給大家。前後這幾節加起來就完成了一個簡單資訊系統的增刪改查(CRUD)的所有操作。
新增連結
要進行這三個操作,首先在查詢頁面的每一條記錄後面新增對應的連結。程式碼如下:
<tr> <td> @Html.DisplayFor(modelItem => item.FirstName) </td> <td> @Html.DisplayFor(modelItem => item.LastName) </td> <td> @Html.DisplayFor(modelItem => item.Sex) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> @Html.ActionLink("Details","Details", new { id = item.ID }) | @Html.ActionLink("Edit", "Edit" , new { id = item.ID }) | @Html.ActionLink("Delete", "Delete", new { id = item.ID }) </td> </tr>
上面程式碼對應著資料列表的一行,其中黃色的部分就是我們新增的連結。這三個連結對應三個不同的操作,他們都需要ID作為引數來確定操作的是哪一條資料,改動後的頁面顯示如下:
紅框部分就是我們新增的連結。
檢視詳情
檢視詳情對應Details連結。點選連結之後會請求當前Contoller,也就是CompanyController的Details Action。那麼我們就在~\Controllers\CompanyController.cs下寫這個Action。程式碼如下:
public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Worker worker = db.Workers.Find(id); if (worker == null) { return HttpNotFound(); } return View(worker); }
第3-6行表示如果訪問這個Actions時沒有給引數id則返回BadRequest錯誤。如下圖所示,位址列裡面沒有給出ID,返回Bad Request錯誤。
第7-11行表示如果根據id沒有找到對應的資訊則返回HttpNotFound錯誤,如下圖所示:
第12行,如果根據id找到了對應的資訊則用View顯示。
在~Views\Company\下建立Details.cshtml檢視,寫入程式碼如下:
@model SlarkInc.Models.Worker @{ ViewBag.Title = "Details"; } <h2>Worker Details</h2> <div> <h4>Student</h4> <hr /> <dl class="dl-horizontal"> <dt> @Html.DisplayNameFor(model => model.FirstName) </dt> <dd> @Html.DisplayFor(model => model.FirstName) </dd> <dt> @Html.DisplayNameFor(model => model.LastName) </dt> <dd> @Html.DisplayFor(model => model.LastName) </dd> <dt> @Html.DisplayNameFor(model => model.Sex) </dt> <dd> @Html.DisplayFor(model => model.Sex) </dd> <dt> @Html.DisplayNameFor(model => model.Rating) </dt> <dd> @Html.DisplayFor(model => model.Rating) </dd> </dl> </div> <p> @Html.ActionLink("Edit", "Edit", new { id = Model.ID }) | @Html.ActionLink("Back to List", "Index") </p>
程式碼中用DisplayNameFor函式顯示屬性名,用DisplayFor函式顯示屬性值。
頁面用<dl><dt><dd>和Bootstrap的"dl-horizontal"類佈局頁面,使每一個屬性名和屬性值佔一行,顯示效果如下:
第37行給出了編輯此頁面的連結。38行給出返回查詢頁面的連結。
編輯資料
在~\Controllers\CompanyController.cs中加入用來進入Edit頁面的Action程式碼如下:
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Worker worker = db.Workers.Find(id);
if (worker == null)
{
return HttpNotFound();
}
return View(worker);
}
看起來眼熟?沒錯,和Details的Action是一模一樣的,這裡就不重複了。
下面寫View。在~\Views\Company\下建立Edit.cshtml檢視,寫入程式碼如下:
@model SlarkInc.Models.Worker
@{
ViewBag.Title = "Edit";
}
<h2>Worker Edit</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.ID)
<div class="form-group">
@Html.LabelFor(model => model.FirstName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.LastName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Sex, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EnumDropDownListFor(model => model.Sex)
@Html.ValidationMessageFor(model => model.Sex)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Rating, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Rating)
@Html.ValidationMessageFor(model => model.Rating)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
@Html.Submit("Submit")
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
這個頁面的程式碼與上一節的插入資料頁面的程式碼基本相同,可以參照上一節的程式碼說明,需要看的點這裡。
第12行用HiddenFor函式儲存當前要修改的記錄的ID以便提交後找到對應的記錄進行更新。
頁面顯示如下:
接下來我們來寫提交更新資料之後需要訪問的Action,在~\Controllers\Company.cs中加入用Post方法訪問的Edit Action,程式碼如下:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ID, FirstName, LastName, Sex, Rating")] Worker worker)
{
if (ModelState.IsValid)
{
db.Entry(worker).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(worker);
}
這段帶碼的知識點講解與上一節Create提交Action的基本相同,點選這裡檢視。
不同點是第7行,根據獲得的worker例項,在資料列表中找到對應記錄,更新其值,並設定其狀態為Modified。最後將改動儲存到資料庫並跳轉回資料查詢頁面。
刪除資料
刪除資料不需要頁面顯示資料,只需在CompanyController下加入一個Delete Action刪除資料即可,程式碼如下:
public ActionResult Delete(int id)
{
try
{
Worker workerToDelete = new Worker() { ID = id };
db.Entry(workerToDelete).State = EntityState.Deleted;
db.SaveChanges();
}
catch(DataException/*dex*/)
{
return RedirectToAction("Index", new { id = id, saveChangesError = true });
}
return RedirectToAction("Index");
}
第5行建立一個只有ID被賦值的worker例項。然後第6行根據這個例項的ID在資料庫中找到對應的資料,設定其狀態為Deleted已刪除,第7行執行刪除操作。
如果刪除成功則在第13行跳轉回查詢頁面,如果失敗則跳轉回查詢頁面並傳遞兩個引數傳遞失敗記錄的ID及saveChangesError = true。根據這兩個傳遞的引數可以在查詢頁面寫出錯誤資訊。這裡就不詳細描述了。
這樣點選刪除連結就能在查詢頁面看到那條資料被刪除了。
結尾
到此,我們完成了對一個簡單資料模型的增刪改查操作。不過其中還有很多知識點沒有詳細描述,比如資料驗證、EF操作資料的函式、View中的各種不同的Http響應等等。後面會一一詳細介紹。
相關推薦
ASP.Net MVC開發基礎學習筆記(9):檢視詳情、編輯資料、刪除資料
前言 所謂萬事開頭難,前面用兩節介紹了查詢頁面,一節介紹了建立資料。由於前面做了大量的鋪墊,本節就能順利的將檢視詳情、編輯資料、刪除資料在一節中全部介紹給大家。前後這幾節加起來就完成了一個簡單資訊系統的增刪改查(CRUD)的所有操作。 新增連結 要進行這三個操作,首先
.net core 2.0學習筆記(四):遷移.net framework 工程到.net core
編譯 its evel hashtable ref 學習筆記 inline null 創建 在遷移.net core的過程中,第一步就是要把.net framework 工程的目標框架改為.net core2.0,但是官網卻沒有提供轉換工具,需要我們自己動手完成了
.net core 2.0學習筆記(六):Remoting核心類庫RealProxy遷移
ride dispatch 包含 void reflect 既然 splay creat (六) 在學習.net core的過程中,我們已經明確被告知,Remoting將不會被支持。官方的解釋是,.net framework 類型包含了太多的Runtime的內容,是
.net core 2.0學習筆記(A11):實戰簡單檔案伺服器
前言:本案例適合入門來看。 首先,新建一個ASP.NET Core專案,專案名稱:StaticFilesServer 選擇空的模板,如下圖: 使用NUGet命令新增Microsoft.AspNetCore.StaticFiles引用: Ins
網易微專業——Java Web開發工程師學習筆記(2):Tomcat
目錄結構:bin:可執行檔案conf:配置檔案lib:Tomcat依賴庫temp:臨時資料夾webapps:預設的應用部署目錄work:供web應用使用bin:啟動指令碼通過改變環境變數JAVA_OPTS,常見啟動引數-server -Xms512m -Xmx512mserv
JAVA基礎學習筆記(1):環境變數設定與Notepad++巨集設定
JAVA環境變數配置: 變數名:JAVA_HOME 變數值:(JAVA JDK安裝路徑) 變數名:CLASSPATH 變數值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 變數名:Path 變數值:%JAVA_H
學習筆記(二):檢視、索引
知識點內容: 檢視 索引 檢視: 概念: View其實是執行查詢語句後得到的結果,可以模擬成資料表來使用,也成為“虛擬資料表” 檢視與資料表的區別: 資料表實際儲存記錄的地方
WPF and Silverlight 學習筆記(七):WPF佈局管理之StackPanel、WrapPanel、DockPanel
一、StackPanel StackPanel是以堆疊的方式顯示其中的控制元件 1、可以使用Orientation屬性更改堆疊的順序 Orientation="Vertical" 預設,由上到下顯示各控制元件。控制元件在未定義的前提下,寬度為StackPa
ASP.NET MVC Bundles 之學習筆記
sax asp.net 發現 ati mvc cti java 意思 學習 在網頁中,我們經常需要引用大量的javascript和css文件,在加上許多javascript庫都包含debug版和經過壓縮的release版(比如jquery),不僅麻煩還很容易引起混亂,所以A
《3D數學基礎:圖形與遊戲開發》 學習筆記(一)
(以下學習筆記為本人最近在學習本書的時候所記載,之中還加入了一些做專案過程中遇到的問題,以及相關知識的補充。筆者水平有限,文中不足之處,還請給予指正,謝謝~)1.將左手座標系變換到右手座標系,只需改變其中一個軸的方向即可。 若改變兩個軸的方向,則與旋轉座標軸無異。 若改變
AutoCAD二次開發(.net教程)C#版——學習筆記(一)
最近開始學習AutoCAD(ObjectARX)的二次開發,首先遇到的一個最大問題就是——開發環境的設定問題,CAD的二次開發對開發工具的版本要求很嚴,開發包、CAD版本和開發工具都得對應(在網上看了很多貼了也有人不用對應)。當下C#比較流行的開發工具就是V
HLSL學習筆記(一):基礎
pad ddx 做了 cto har 分割 with 圖形 content http://www.cnblogs.com/rainstorm/archive/2013/05/04/3057444.html 前言 五一在家無事,於是學習了一下HLSL,基於XAN4.0的。學習
前端開發入門學習筆記(一)
type red 學習 lin attach black 復合 等於 round HTML:超文本標記語言。 html:是一個基礎結構。 CSS:就是跟網頁做裝修的,修飾HTML的基礎內容:樣式。 JavaScript:一個網頁的行為,動作,動態的東西。 html標準文件格
Java語言基礎學習筆記(七)
day tez lec mdk abd err .com mar mdm 烈7A茨諳9m繁5暗MChttp://www.zcool.com.cn/collection/ZMTg3NzE1Njg=.html 3馗iC蓖17握WM啦http://www.zcool.com.cn
Java基礎學習筆記(四)
animal 自定義類型 轉型 通過 PC pri 法則 lse super() 21.構造方法(續):分類: 隱式構造方法:如果在一個類中,沒有手動編寫構造方法,則系統會提供一個默認的無參的構造方法 顯式構造方法:如果在一個類中,手動編寫構造方法,則系統不會提供默認的
Guava學習筆記(二):基礎(Joiner,Objects,Splitter及Strings)
nonnull obj expect null dto 字符 情況 core cte 添加Maven依賴 JoinerTest import com.google.common.base.Joiner; import org.junit.Assert; import org
安卓開發學習筆記(二):Android Stuidio無法引用Intent來創建對象,出現cannot resolve xxx
編譯器 port stact 消失 click first 紅色 xxx font 筆者在進行安卓開發時,發現自己的代碼語法完全沒有問題。尤其是創建intent對象的時候,語法完全是正確的,但是Android Stuidio卻顯示報錯,Intent類顯示為紅色,如圖所示:
MOOC-浙江大學-博弈論基礎-學習筆記(二)
第一講(下) 博弈的術語 1.參與人(players):理性選擇的主體。 2.資訊(information):參與者有關博弈的知識。“知己知彼,百戰不殆”。 3.行動(action):參與者能夠選擇的變數。 4.策略(strategies):參與者在行動之前所準備好的一套完整的行
MOOC-浙江大學-博弈論基礎-學習筆記(三)
第二講 基本假設 from:蔣文華 基本假設是博弈論的理論基礎 第一節 理性假設 一、認知理性 1.人是自我利益的判斷者 清楚的知道想要什麼,更想要什麼。 具有偏好的完備性, 具有偏好的傳遞性, 中庸之道(綜合激
MOOC-浙江大學-博弈論基礎-學習筆記(一)
MOOC-浙江大學-博弈論基礎-學習筆記(一) 老師:蔣文華 知人者智,自知者明; 勝人者力,自勝者強; 小勝者術,大勝者德。 第一講 概論 1.何為博弈? 博-博覽全域性, 奕-對弈棋局, 謀定而動! 博弈–是指在一定的遊戲規則約束下,基於直接相互作用