1. 程式人生 > >ASP.Net MVC開發基礎學習筆記(9):檢視詳情、編輯資料、刪除資料

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開發工程師學習筆記2Tomcat

目錄結構: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佈局管理之StackPanelWrapPanelDockPanel

一、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.何為博弈? 博-博覽全域性, 奕-對弈棋局, 謀定而動! 博弈–是指在一定的遊戲規則約束下,基於直接相互作用