發表文章

目前顯示的是 4月, 2022的文章

Blazor第7天_Blazor自訂元件實作_共用分頁元件

圖片
  用來儲存每一頁要顯示特定筆數分頁結果的資料結構 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 using System ; using System.Collections.Generic ; using System.Text ; namespace Common.Pagination { /// <summary> /// TODO:分頁機制:Add by Samuel 用來儲存每一頁要顯示特定筆數分頁結果的資料結構 /// </summary> /// <typeparam name="T"></typeparam> public struct PagingResult <T> { public IEnumerable<T> Records { get ; set ; } public int TotalRecords { get ; set ; } public PagingResult (IEnumerable<T> items, int totalRecords) { Records = items; TotalRecords = totalRecords; } } } 儲存下面分頁元件的資料結構 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 using System ; using System.Collections.Generic ; using System.Text ; namespace Co

Blazor第6天_Blazor_在Blazor中去呼叫存取javascript

圖片
  專案目錄嚇新建一個js ~\wwwroot\js\MyUtility.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 function ShowAlertJs(message) { alert( "Hello" + message); } function ReturnResult() { return confirm( "Are you sure you want to delete?" ); } function GetFocus(id) { document .getElementById(id).focus(); } function EnableAccordian() { $( function () { $( "#accordion" ).accordion(); }); } 至~\Pages\_Host.cshtml 進行全域引用 自行創建測試頁razor 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 @page "/javascript" @inject IJSRuntime jsRuntime <h3>Javascri

Blazor第5天_Blazor_元件的處理part3.(CascadingParameter)_ParentComponent(特定Layout)中方法在子元件呼叫的方法

圖片
  近期同事跟主管遇到技術困難協助研究一番 由於UI上標題要於跳轉至特定某頁去更換標題 但原先更新標題觸發事件跟時機都寫在側欄click後才去設定 因此若不是透過側欄點進去的就沒辦法存取更新到正確的標題 CascadingParameter也無法直接從子元件去更新ParentComponent的變數屬性 以往都是單向的設值(從Parent到Child) Before After Step1.要先確認當前該頁引用的是默認全域Layout ParentComponent還是自己有額外設置 以此頁為例就是有使用額外自訂的Layout元件 默認全域Layout ParentComponent 會在App.razor當中 Step2.至Layout元件(只要該頁上方有@inherits LayoutComponentBase 的就都算一種Layout元件) 包覆一組CascadingValue <CascadingValue Value="this"> …..原先該元件中整頁內容都要包進來… </CascadingValue> Step3.於該頁Layout下定義方法(或將標題用C#屬性包覆裡面可設定寫入時候的邏輯) Step4.至子元件中透過CascadingParameter參考到該特定類型的Layout Component(對目前領料該頁相當於其Parent Component) 並在要賦值或異動時機(可能blazor頁面事件or生命週期)去觸發參考到的Parent Component中定義的設值方法或針對屬性去賦值 參考文章: 官網 https://docs.microsoft.com/zh-tw/aspnet/core/blazor/components/cascading-values-and-parameters?view=aspnetcore-3.1 Is there any way to communicate to main layout of blazor pages https://stackoverflow.com/questions/66476652/is-there-any-way-to-communicate-to-main-layout-of-blazor-pages In Blazor, how

EntityFramework Core筆記(4)_延遲加載(執行)_IQueryable跟IEnumerable差異

圖片
  延遲加載(執行) : 屬於預設情況,當你查詢 一個集合就延遲,等到真正要使用存取該資料才去DB抓。 預設從DbContext存取的表資料回傳只要還沒去call .ToList() 或是 .ToArray() 等方法 都是回傳IQueryable<T> 都還不會真正跟DB有交握。 優點: 就在於可以降低阻塞,提升性能 需注意: 加載資料不能夠在DbContext被回收之後才運行 延遲加載(執行)-測試程式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 using EFCoreDbFirst_ConsoleApp.Models ; using System ; using System.Linq ; namespace EFCoreDbFirst_ConsoleApp { class Program { static void Main ( string [] args) { try { using (CustomerDbContext context = new CustomerDbContext()) { //Lazy Loading IQueryable<Commodity> commodities = context.Commodities.Where(item => item.Id == 20001 ); Console.WriteLine( "開始存取" ); foreach ( var item in commodities) { Console.WriteLine(item.Title);

EntityFramework Core筆記(3)_DbFirst指令_監聽SQL語法兩種方式(SQL Server Profiler/LoggerFactory)

圖片
 為了怕之後有新人來 一來要帶人 一來還要趕專案 因此筆記一下工作常用的開發工具 專案.net core主控台新建並安裝好如下四套件 資料庫中目前存在的資料表 如要快速於本機產生此DB及相應Tables 執行如下T-SQL即可 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 USE [master] GO /****** Object: Database [AdvancedCustomerDB] Script Date: 2021/10/29 11:40:58 ******/ CREATE DATABASE [AdvancedCustomerDB] CONTAINMENT = NONE ON PRIMARY ( NAME = N 'AdvancedCustomerDB' , FILENAME = N 'E:\IT_Db\AdvancedCustomerDB.mdf&#