Blazor 4 Bootstrap 對話窗顯示與關閉練習
建立測試專案
現在可以開始建立第一個 Blazor 開發專案。
- 啟動 Visual Studio 2017
- 點選功能表的 [檔案] > [新增] > [專案] 功能表選項
- 在 [新增專案] 對話窗中左邊區域,選擇 [已安裝] > [Visual C#] > [Web] > [ASP.NET Core Web 應用程式]
- 在對話窗的下方的 [名稱] 欄位中,輸入這個練習專案的名稱 BlazorModal
- 在對話窗的下方的 [位置] 欄位中,選擇這個專案要儲存的檔案路徑
- 最後點選對話窗的右下方 [確定] 按鈕
- 在 [新增 ASP.NET Core Web 應用程式] 對話窗左上方區域,在第一個下拉選單,選擇 [.NET Core] 在第二個下拉選單,請選擇最新的 ASP.NET Core 版本,在現在這個時間點,可以選擇 [ASP.NET Core 2.1]
- 在對話窗中間區域,請點選 [Blazor] 這個項目
- 最後點選對話窗的右下方 [確定] 按鈕
修正 Counter 元件,發佈特定事件通知
為了要做到上面提到的效果,在這裡進行修正了 Counter 元件的原始碼,當使用者按下 Click me 按鈕,且 currentCount 變數值為偶數,則將會顯示出來這個對話窗。
該對話窗已經宣告在這個元件上,不過,預設因為變數 ShowDialog 為 false,所以,該對話窗的內容不會顯示在網頁上,因此,當 currentCount 變數值為偶數的時候,將會把 ShowDialog 變數值為 true,也因此
<div class="modal " tabindex="-1" style="display:block" role="dialog">...</div>
這些 HTML 標記就會顯示在網頁上,也就是該對話窗內容。
在該對話窗上的兩個回應按鈕,也透過了 Blazor 的按鈕事件綁定方式,綁定到該元件內的特定方法,例如,對於 是 這個按鈕,將會使用
<button class="btn btn-danger" onclick="@CloseModalYes">是</button>
這樣的標籤來宣告,當按下了這個按鈕之後,將會執行該元件內的 CloseModalYes 委派事件方法,此時,該變數 DeleteResult 將會設定為 是的,刪除這筆員工資料 這個文字字串,而該變數也綁定在網頁之上,因此,在網頁上也會看到這個文字;而對於 否 按鈕,將會使用 <button class="btn btn-warning" onclick="@CloseModalNo">否</button>
這個 HTML 標籤來宣告,當 CloseModalNo 方法被觸發之後,因為變數 DeleteResult 將會設定為 不,放棄刪除這筆員工資料 這個文字字串,而該變數也綁定在網頁之上,因此,在網頁上也會看到這個文字。
現在,請依照底下說明來修正專案程式碼
- 請打開 [Pages] 資料夾內的 [Counter.cshtml] 檔案
- 使用底下程式碼替換掉 [Counter.cshtml] 檔案內容
Pages > Counter.cshtml
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" onclick="@IncrementCount">Click me</button>
<p>刪除選擇:@DeleteResult</p>
<div class="modal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Modal title</h4>
</div>
<div class="modal-body">
<p>Contents go here...</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
@if (ShowDialog)
{
<div class="modal " tabindex="-1" style="display:block" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">刪除員工資料</h3>
</div>
<div class="modal-body">
<h4>你確定要刪除這筆員工資料嗎 ??</h4>
<table class="table">
<tr>
<td>姓名</td>
<td>@emp.Name</td>
</tr>
<tr>
<td>性別</td>
<td>@emp.Gender</td>
</tr>
<tr>
<td>部門</td>
<td>@emp.Department</td>
</tr>
<tr>
<td>城市</td>
<td>@emp.City</td>
</tr>
</table>
</div>
<div class="modal-footer">
<button class="btn btn-danger" onclick="@CloseModalYes">是</button>
<button class="btn btn-warning" onclick="@CloseModalNo">否</button>
</div>
</div>
</div>
</div>
}
@functions {
int currentCount = 0;
bool ShowDialog = false;
string DeleteResult = "";
public class Empolyee
{
public string Name { get; set; }
public string Gender { get; set; }
public string Department { get; set; }
public string City { get; set; }
}
Empolyee emp = new Empolyee()
{
Name = "Vulcan Lee",
Gender = "M",
City = "Kaohsiung",
Department = "IT"
};
void IncrementCount()
{
currentCount++;
DeleteResult = "";
if (currentCount % 2 == 1)
{
ShowDialog = true;
}
}
void CloseModalYes()
{
ShowDialog = false;
DeleteResult = "是的,刪除這筆員工資料";
}
void CloseModalNo()
{
ShowDialog = false;
DeleteResult = "不,放棄刪除這筆員工資料";
}
}
執行結果
現在,請執行這個專案,點選左邊側邊攔的 Counter 項目,接著在網頁中間來點選 Click me 這個按鈕,現在將會發現到,若 currentCount 這個變數為奇數的時候,網頁上將會出現了 刪除員工資料 這個對話窗
若在對話窗中點選 是 這個按鈕,則該對話窗將會消失,且網頁上會出現 是的,刪除這筆員工資料 文字內容
若在對話窗中點選 否 這個按鈕,則該對話窗將會消失,且網頁上會出現 不,放棄刪除這筆員工資料 文字內容
更多關於 Blazor 教學影片,可以參考 Blazor 教學影片播放清單 或者 Blazor 快速體驗教學影片撥放清單。也歡迎訂閱本 .NET / Blazor / Xamarin.Forms 影片頻道 。
通常在進行開發一個類似 CRUD 的應用程式,使用者可能會點選某一筆紀錄,接著進行修該該紀錄的內容,接著就會點選 儲存 按鈕,此時大多會在網頁上顯示一個對話窗,詢問使用者是否要儲存該筆紀錄,不會使用者點選了 確定 或者 放棄 按鈕,該對話窗將會從螢幕上再度隱藏並且消失了。在這篇文章中,將會說明如何使用 Blazor 開發出這樣的應用,當然,還是秉持著完全都使用 .NET C# 的方式,而沒有使用到 JavaScript 來進行開發的精神;在這裡使用了 Bootstrap Modal 功能,來模擬使用者要刪除一筆員工紀錄的時候,會顯示一個對話窗詢問使用者,真的要刪除這筆紀錄嗎?該對話窗內會有該員工紀錄的詳細資料,並且還有兩個按鈕,分別是 是 與 否,而不論使用者點選了哪個按鈕,在這個元件上都會有一個 .NET C# 的按鈕事件綁定在一起。本篇文章的範例原始碼,可以從 BlazorModal 取得。