這是一個很棒的個人化功能。要實現「根據工號保存設定」,我們需要將架構從「純前端 (JavaScript)」擴展為「前端 + 後端 (資料庫)」。 核心思路是: * 後端 (資料庫): 建立一個資料表,用來儲存 EmployeeID 和他勾選的欄位字串 (例如:"col-pdid,col-weight,col-tam")。 * 後端 (Controller): * Index 載入時:抓取目前工號 -> 查詢資料庫 -> 取得該工號的設定字串 -> 將字串傳給 View。 * 新增一個 SavePreferences Action:接收前端傳來的設定字串 -> 存入/更新資料庫。 * 前端 (View/JavaScript): * 頁面載入時:接收 Controller 傳來的設定字串,如果字串為空(預設空白),則不勾選任何項目。如果 有字串,則解析字串並自動勾選對應欄位。 * 新增「保存設定」按鈕:點擊時,蒐集當前所有勾選的欄位,透過 AJAX 傳給後端的 SavePreferences Action。 步驟 1:資料庫 (概念) 您需要在資料庫中建立一個簡單的資料表,例如: Table: UserColumnPreferences | ColumnName | DataType | Notes | | :--- | :--- | :--- | | EmployeeID | nvarchar(50) | 主索引鍵 (Primary Key) | | VisibleColumns | nvarchar(MAX) | 儲存逗號分隔的 class 名稱 | 步驟 2:Controller (VB.NET) 假設您已經有方法可以取得「目前登入者的工號」(例如 Session("EmployeeID") 或 User.Identity.Name)。 ' 假設您使用 Entity Framework 或 ADO.NET ' Public db As New MyDbContext() Public Class HomeController Inherits Controller ' GET: Home Public Function Index() As ActionResult Dim employeeID As String = "EMP001" ' 範例:您需要替換成真實的工號取得方式 ' 1. 取得產品資料 (與之前相同) Dim products As New List(Of Product) From { ... } ' 您的產品資料 ' 2. 查詢使用者的欄位偏好設定 ' ----------------------------------------------------- Dim savedPrefs As String = "" ' 預設為空白 ' *** 假設您有一個資料庫服務來抓取資料 *** ' Dim preferenceEntry = db.UserColumnPreferences.Find(employeeID) ' If preferenceEntry IsNot Nothing Then ' savedPrefs = preferenceEntry.VisibleColumns ' End If ' ----------------------------------------------------- ' 3. 將設定傳遞給 View ViewBag.SavedPreferences = savedPrefs Return View(products) End Function ' POST: Home/SavePreferences <HttpPost> Public Function SavePreferences(preferences As String) As ActionResult Dim employeeID As String = "EMP001" ' 範例:您需要替換成真實的工號取得方式 ' *** 儲存到資料庫 (UPSERT 邏輯) *** ' ----------------------------------------------------- ' Dim preferenceEntry = db.UserColumnPreferences.Find(employeeID) ' If preferenceEntry IsNot Nothing Then ' ' 更新 ' preferenceEntry.VisibleColumns = preferences ' Else ' ' 新增 ' db.UserColumnPreferences.Add(New UserColumnPreferences With { ' .EmployeeID = employeeID, ' .VisibleColumns = preferences ' }) ' End If ' db.SaveChanges() ' ----------------------------------------------------- ' 回傳成功訊息給 AJAX Return Json(New With {.success = True, .message = "設定已保存"}) End Function End Class 步驟 3:View (Index.vbhtml) 這是變更的關鍵。我們需要: * 移除所有 Checkbox 上的預設 checked 屬性 (以符合「預設為空白」)。 * 新增「保存設定」按鈕。 * 大幅修改 JavaScript 邏輯。 <!-- end list --> @ModelType IEnumerable(Of MvcVbApp.Product) ' 替換成你的專案命名空間 <h2>產品列表</h2> <div class="panel panel-default" style="margin-bottom: 20px;"> <div class="panel-heading"> <strong>顯示欄位</strong> </div> <div class="panel-body"> <div class="checkbox"> <label> <input type="checkbox" id="checkAll" /> <strong>全部選取</strong> </label> </div> <hr style="margin-top: 10px; margin-bottom: 20px;"> <div class="row"> <div class="col-md-3 col-sm-6"> <div class="checkbox"> <label> <input type="checkbox" class="column-toggle" data-column="col-pdid" /> PDID </label> </div> </div> <div class="col-md-3 col-sm-6"> <div class="checkbox"> <label> <input type="checkbox" class="column-toggle" data-column="col-qty" /> QTY </label> </div> </div> </div> <hr style="margin-top: 20px; margin-bottom: 10px;"> <button id="btnSavePrefs" class="btn btn-primary"> <span class="glyphicon glyphicon-floppy-disk"></span> 保存我的勾選 </button> <span id="saveStatus" style="margin-left: 10px; color: green;"></span> </div> </div> <table class="table table-bordered table-striped" id="productTable"> </table> @Section Scripts <script> $(document).ready(function () { // ------------------------------------------------- // 函式 1: 根據子項目,更新 "全部選取" 的狀態 // ------------------------------------------------- function updateCheckAllState() { var allChecked = $(".column-toggle:checked").length === $(".column-toggle").length; $("#checkAll").prop("checked", allChecked); } // ------------------------------------------------- // 函式 2: 根據勾選狀態,切換欄位顯示/隱藏 // ------------------------------------------------- function toggleColumn(columnClass, isChecked) { $("." + columnClass).toggle(isChecked); } // ------------------------------------------------- // 頁面載入時:套用保存的設定 // ------------------------------------------------- var savedPrefs = "@(ViewBag.SavedPreferences)"; if (savedPrefs) { // 如果有保存設定 var prefList = savedPrefs.split(','); $(".column-toggle").each(function () { var col = $(this).data("column"); if (prefList.includes(col)) { $(this).prop("checked", true); } }); } // 如果 savedPrefs 為空 (預設空白),則不執行任何操作,保持全部未勾選 // 載入後,立即根據 "預設勾選" (來自DB) 執行一次欄位隱藏 $(".column-toggle").each(function () { toggleColumn($(this).data("column"), $(this).prop("checked")); }); updateCheckAllState(); // 更新 "全部選取" 按鈕狀態 // ------------------------------------------------- // 事件綁定 1: "全部選取" // ------------------------------------------------- $("#checkAll").click(function () { var isChecked = $(this).prop("checked"); $(".column-toggle").prop("checked", isChecked); // 觸發 change (會執行下面的 toggleColumn) $(".column-toggle").trigger("change"); }); // ------------------------------------------------- // 事件綁定 2: "單一欄位勾選" // ------------------------------------------------- $(".column-toggle").change(function () { var columnClass = $(this).data("column"); var isChecked = $(this).prop("checked"); toggleColumn(columnClass, isChecked); updateCheckAllState(); // 更新 "全部選取" }); // ------------------------------------------------- // 事件綁定 3: "保存設定" 按鈕 (AJAX) // ------------------------------------------------- $("#btnSavePrefs").click(function () { var selectedCols = []; // 蒐集所有 "已勾選" 的欄位 $(".column-toggle:checked").each(function () { selectedCols.push($(this).data("column")); }); // 將陣列轉為字串 var prefsString = selectedCols.join(','); $("#saveStatus").text("保存中..."); // 使用 AJAX 傳送到 Controller $.ajax({ url: "@Url.Action("SavePreferences", "Home")", type: "POST", data: { preferences: prefsString }, success: function (response) { if (response.success) { $("#saveStatus").text(response.message).fadeIn().delay(3000).fadeOut(); } }, error: function () { $("#saveStatus").text("保存失敗").css("color", "red").fadeIn().delay(3000).fadeOut(); } }); }); }); </script> End Section
留言
Pocheng Chiu的沙龍
0會員
24內容數
Pocheng Chiu的沙龍的其他內容
2025/11/04
了解。您不希望勾選項全部擠在同一行 (inline),而是希望它們像表格一樣,整齊地排列成網格 (Grid)。
在舊版 Bootstrap (3/4) 中,最好的做法是使用它內建的網格系統 (Grid System) (.row 和 .col-*) 來取代 .checkbox-inline。
我
2025/11/04
了解。您不希望勾選項全部擠在同一行 (inline),而是希望它們像表格一樣,整齊地排列成網格 (Grid)。
在舊版 Bootstrap (3/4) 中,最好的做法是使用它內建的網格系統 (Grid System) (.row 和 .col-*) 來取代 .checkbox-inline。
我
2025/11/04
了解,這是將您提供的 12 個欄位套用到先前 Bootstrap 3/4 範本的 Index.vbhtml 程式碼。
核心的 JavaScript/jQuery 邏輯完全不需要變更,您只需要更新 View 中的 HTML 勾選區和表格欄位。
1. 欄位勾選區 (更新)
請將 Views/Home/I
2025/11/04
了解,這是將您提供的 12 個欄位套用到先前 Bootstrap 3/4 範本的 Index.vbhtml 程式碼。
核心的 JavaScript/jQuery 邏輯完全不需要變更,您只需要更新 View 中的 HTML 勾選區和表格欄位。
1. 欄位勾選區 (更新)
請將 Views/Home/I
2025/10/13
好的,理解您的需求。這是一份標準作業流程 (SOP) 格式的知識操作文件,旨在引導初學者一步步使用 Azure DevOps Boards 進行專案管理。
Azure DevOps Boards 專案管理標準作業流程 (SOP)
1. 文件目的 (Objective)
本文件旨在提供一份清晰、可執行
2025/10/13
好的,理解您的需求。這是一份標準作業流程 (SOP) 格式的知識操作文件,旨在引導初學者一步步使用 Azure DevOps Boards 進行專案管理。
Azure DevOps Boards 專案管理標準作業流程 (SOP)
1. 文件目的 (Objective)
本文件旨在提供一份清晰、可執行
你可能也想看
















全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?

全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?

若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。

若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。

20251105 「護法總說」課程後問題回覆
20251018「護法總說」課後,同學陸續提出問題,彙整後回覆如下。
1、滿願童子相關:
1-1 家裡已有滿願童子,還可以供養荷莉蒂姆和冰羯羅童子的護子母唐卡嗎?
A:可以供養荷莉蒂姆+滿願童子護子母唐卡,也可以用原來的滿願童子

20251105 「護法總說」課程後問題回覆
20251018「護法總說」課後,同學陸續提出問題,彙整後回覆如下。
1、滿願童子相關:
1-1 家裡已有滿願童子,還可以供養荷莉蒂姆和冰羯羅童子的護子母唐卡嗎?
A:可以供養荷莉蒂姆+滿願童子護子母唐卡,也可以用原來的滿願童子
當前美股受到幾個重大因素的影響,導致市場呈現觀望的現象。隨著美國總統大選和聯邦公開市場委員會(FOMC)貨幣政策會議的臨近,投資者的觀望態度日益明顯。專家預測,選舉將帶來較高的波動性,但CFRA策略師強調,企業財報和美聯儲政策的影響更為深遠。波動率指數(VIX)僅小幅上漲,顯示市場恐慌情緒有限。
當前美股受到幾個重大因素的影響,導致市場呈現觀望的現象。隨著美國總統大選和聯邦公開市場委員會(FOMC)貨幣政策會議的臨近,投資者的觀望態度日益明顯。專家預測,選舉將帶來較高的波動性,但CFRA策略師強調,企業財報和美聯儲政策的影響更為深遠。波動率指數(VIX)僅小幅上漲,顯示市場恐慌情緒有限。

本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。

本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。

長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。

長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。

川習會圓滿落幕
這週川習會順利結束,正如我們先前預期的風平浪靜。沒有外界想像中的變數,雙方僅談了一個多小時就結束,整體氣氛平和,像是一場形式性的對話。
達成的協議也如我們在上一篇專欄所預料,美國暫緩實施 100% 的新關稅,並將部分對中關稅從 57% 降至 47%,中國則恢復採購美國大豆,並延長

川習會圓滿落幕
這週川習會順利結束,正如我們先前預期的風平浪靜。沒有外界想像中的變數,雙方僅談了一個多小時就結束,整體氣氛平和,像是一場形式性的對話。
達成的協議也如我們在上一篇專欄所預料,美國暫緩實施 100% 的新關稅,並將部分對中關稅從 57% 降至 47%,中國則恢復採購美國大豆,並延長

多國呼籲於2030年前全面禁用含汞的牙科填充物
葉騰可望成為荷蘭最年輕總理
秘魯與墨西哥斷交
TikTok遭指控助長脆弱群體尋短
歐盟多位官員的手機定位資料遭公開販售

多國呼籲於2030年前全面禁用含汞的牙科填充物
葉騰可望成為荷蘭最年輕總理
秘魯與墨西哥斷交
TikTok遭指控助長脆弱群體尋短
歐盟多位官員的手機定位資料遭公開販售




