基于 ASP.NET Web 應用程序(.NET Framework)的花店系統

1.1功能模塊實現

1.1.1整體結構

界面由兩部分組成:左側導航欄、右側內容展示區。使用了 Bootstrap 5 的樣式庫,并結合了 ASP.NET MVC 的 @Html.ActionLink 和 Razor 條件判斷語句來動態生成菜單項。

1.1.2導航欄功能模塊

導航欄基礎結構

導航欄基礎結構使用 Bootstrap 的 navbar 類構建響應式導航欄。flex-column align-items-start 表示導航欄是垂直方向排列的。

響應式按鈕

展示區顯示折疊菜單按鈕使用data-bs-toggle="collapse" 控制展開/收起。

動態菜單

根據用戶登錄狀態和角色不同,顯示不同的菜單項。

登錄前:顯示“登錄”選項

登錄后:設計用戶角色:

店主功能用戶管理、花卉管理、訂單管理;普通用戶功能購物車、訂單界面、客服界面;管理員功能用戶管理、花卉管理、花店訂單管理。

商品搜索框

使用Ajax.BeginForm 實現異步搜索鮮花的功能,無需刷新頁面即可更新商品列表。

3.1.2右側內容展示區

主體內容容器使用 flex-grow-1 確保內容區域自動擴展以填滿剩余空間。

@RenderBody() 是 MVC 布局頁中的占位符,表示子頁面的內容會在此處插入。

3.1.3主要功能模塊

模塊

功能說明

導航欄

實現響應式菜單,支持不同用戶角色(管理員、店主、顧客)的不同菜單項。

權限控制

根據 Session 中的角色信息動態渲染菜單內容。

搜索功能

使用 AJAX 實現無刷新搜索,提升用戶體驗。

內容展示區

支持子頁面內容動態加載,保持統一風格。

腳本管理

集中式引入常用腳本庫,允許子頁面添加自定義腳本。

?

3.2控制器介紹

3.2.1購物車控制器

通過多個Action 方法來實現添加、修改、刪除購物車內容以及顯示購物車信息等操作。

(1)?Index()

獲取當前登錄用戶的 ID。查詢該用戶的所有購物車條目,并包含關聯的 Flowers 和 Users 數據。計算購物車中所有商品的總價(單價 × 數量),傳遞給視圖。返回視圖并展示購物車列表。依賴 Session["UserID"] 來判斷當前用戶。

(2)?InsertCart(int flowerID)

判斷用戶是否登錄(Session 是否存在 UserID)。判斷用戶身份是否是管理員或店主,如果是,則不允許購買。檢查該用戶是否已將此商品加入過購物車:若沒有,新增一條記錄;若有,將數量加一。保存更改后返回提示信息。使用了 JavaScript 提示框 (<script>alert(...)</script>) 并返回上一頁。

(3)?AddOne(int id)

根據 CartID 查找購物車條目。將商品數量加一。更新數據庫狀態并保存。

(4)?MinusOne(int id)

同樣根據 CartID 查找購物車條目。商品數量減一:若數量變為 0,則直接刪除該條目;

否則更新數量。

(5)?Delete(int id)

刪除指定 ID 的購物車條目。保存更改后跳轉回購物車首頁。

3.2.2購物車控制器

用于處理與訂單(Order)相關的操作。它使用了 ASP.NET MVC 框架,并結合 Entity Framework 實現對數據庫中訂單數據的訪問和管理。

(1)Index()

功能:展示訂單列表。權限控制:如果未登錄(Session["RoleName"]為空),跳轉到登錄頁。如果是“管理員”或“店主”,顯示全部訂單。如果是普通用戶,則只顯示當前用戶的訂單。

(2)UpdateOrderState(int id, int state)

功能:根據傳入的狀態值更新訂單狀態。參數說明:id: 訂單IDstate: 狀態碼(應映射為枚舉 OrderState)表示訂單的狀態。

3.3 技術介紹

3.3.1購買的倒計時功能

獲取DOM元素:通過document.querySelector('.btn-gradient') 和 document.getElementById('countdown') 分別獲取按鈕和倒計時提示框的引用。禁用按鈕:當函數開始執行時,首先禁用了按鈕防止重復點擊,并且改變了按鈕的文字內容為帶有旋轉圖標的“處理中…”以給用戶視覺反饋。初始化倒計時:將倒計時設定為3秒,并將這個數值顯示在倒計時框內。定時器邏輯:使用setInterval()方法每秒更新一次倒計時:減少剩余時間,并更新倒計時框中的數字。應用了一個名為countdown-pulse的CSS類,用于實現數字的跳動效果。根據剩余時間動態調整背景顏色,提供更豐富的視覺體驗。當倒計時結束(即seconds小于等于0),清除定時器,恢復按鈕的狀態,并導航到購物車頁面。

JS代碼解釋

function addToCart(flowerId) {

????// 獲取按鈕和倒計時元素

????var button = document.querySelector('.btn-gradient');

????var countdown = document.getElementById('countdown');

?

????// 禁用按鈕并改變按鈕文本為加載狀態

????button.disabled = true;

????button.innerHTML = '<i class="fa fa-spinner fa-spin"></i> 處理中...';

?

????// 顯示倒計時框并應用動畫效果

????countdown.style.display = 'inline-block';

????countdown.classList.add('countdown-show');

?

????let seconds = 3; // 設置倒計時秒數

????const numberElement = countdown.querySelector('.countdown-number'); // 獲取倒計時數字元素

????numberElement.textContent = seconds; // 初始化倒計時數字

?

????// 開始定時器,每秒更新一次

????const timer = setInterval(() => {

????????seconds--; // 每次循環減少一秒

????????numberElement.textContent = seconds; // 更新倒計時數字

????????numberElement.classList.add('countdown-pulse'); // 添加跳動動畫類

?

????????// 動態修改背景顏色以增加視覺效果

????????countdown.style.background = `linear-gradient(145deg,

????????????hsl(${seconds * 40}, 70%, 60%),

????????????#a363d9)`;

?

????????// 在每次添加跳動動畫類之后短暫延遲移除它,創建脈沖效果

????????setTimeout(() => {

????????????numberElement.classList.remove('countdown-pulse');

????????}, 200);

?

????????// 如果倒計時結束

????????if (seconds <= 0) {

????????????clearInterval(timer); // 清除定時器

????????????countdown.classList.remove('countdown-show'); // 移除動畫效果

????????????setTimeout(() => {

????????????????countdown.style.display = 'none'; // 隱藏倒計時框

????????????????button.disabled = false; // 啟用按鈕

????????????????button.innerHTML = '立即購買'; // 恢復按鈕文本

????????????????window.location.href = '@Url.Action("InsertCart","Cart",new { flowerID=Model.FlowerId})'; // 跳轉至購物車頁面

????????????}, 500);

????????}

????}, 1000); // 每隔一秒鐘調用一次回調函數

}

3.3.2花卉類別選擇功能介紹

視圖模型綁定

當前頁面綁定了一個 Flowers 類型的集合數據,用于展示默認或篩選后的花卉列表。

@model IEnumerable<FlowerShop.Models.Flowers>

HTML結構的下拉菜單

使用了 ViewBag.flowerType 提供所有花卉類型的選項。每個 <option> 的 value 是花卉類型的 ID,提交后作為參數傳給后臺搜索方法。

<select id="flowerTypeSelect" name="flowertype" onchange="this.form.submit();">

????<option value="" disabled selected>選擇花卉類型</option>

????@foreach (var flowertype in ViewBag.flowerType as List<FlowerShop.Models.FlowerTypes>)

????{

????????<option value="@flowertype.FlowerTypeId">@flowertype.FlowerTypeName</option>

????}

</select>

Ajax 異步請求

表單使用了 Ajax.BeginForm 實現無刷新提交。提交時調用控制器 FlowersController 中的 SearchFlowerList(int? flowertype) 方法。返回結果更新到 #GoodShow 容器中,不會重新加載整個頁面。

@using (Ajax.BeginForm("SearchFlowerList", "Flowers", new AjaxOptions { ... }))

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90606.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ Qt6 CMake qml文件啟動方式說明

在Qt6之后,Qt程序默認使用CMake進行構建,當然也可以使用qmake, 本篇博客介紹Qt6.8之前和Qt6.8版本中QtQuick程序的啟動方式。 在QtQuick程序main.cpp里qml的文件啟動分為兩種:(1)直接加載qml文件,(2)加載qml模塊,下面分別介紹這兩種啟動方式。 方式1:直接啟動qml文…

字符串 “asdasjkfkasgfgshaahsfaf” 經過哈夫曼編碼之后存儲比特數是多少?

要計算字符串 “asdasjkfkasgfgshaahsfaf” 經過哈夫曼編碼后的存儲比特數&#xff0c;需按以下步驟進行&#xff1a;步驟 1&#xff1a;統計字符出現頻率先統計字符串中每個字符的出現次數&#xff1a;a&#xff1a;出現 6 次s&#xff1a;出現 6 次d&#xff1a;出現 1 次j&a…

什么是游戲盾(高防版)?

隨著網絡游戲產業的快速發展&#xff0c;游戲服務器的安全問題日益受到關注。DDoS攻擊、CC攻擊等網絡威脅常常導致游戲卡頓、斷線甚至服務器宕機&#xff0c;嚴重影響玩家體驗。游戲盾&#xff08;高防版&#xff09;是一種專為游戲業務設計的網絡安全防護服務&#xff0c;集成…

openGauss數據庫在CentOS 7 中的單機部署與配置

部署 版本選擇 通過openGuass官網下載地址 &#xff0c;我們可以看到它支持x86_64與Aarch64兩種平臺&#xff0c;又分成openEuler 22、openEuler 20、Centos 7以及Docker 版本。 進入CentOS 7標簽&#xff0c;看到又分成企業版、輕量版、極簡版與分布式鏡像版。 本文只討論…

HTTP響應狀態碼詳解

HTTP 響應狀態碼&#xff08;HTTP Status Code&#xff09;是服務器在響應客戶端請求時返回的 3 位數字代碼&#xff0c;用于表示請求的處理狀態。以下是常見的 HTTP 狀態碼及其含義&#xff1a; 1xx&#xff08;信息性狀態碼&#xff09; 表示請求已被接收&#xff0c;需要繼…

Pytorch中register_buffer和torch.nn.Parameter的異同

說下register_buffer和Parameter的異同 相同點方面描述追蹤都會被加入 state_dict&#xff08;模型保存時會保存下來&#xff09;。與 Module 的綁定都會隨著模型移動到 cuda / cpu / float() 等而自動遷移。都是 nn.Module 的一部分都可以通過模塊屬性訪問&#xff0c;如 self…

吉吉巳資源整站源碼完整打包,適用于搭建資源聚合/整合類站點,全網獨家,拿來就用

想要搭建一個資源整合站點&#xff0c;如影視聚合類站點、資訊聚合類站點、圖集聚合類站點等&#xff0c;需要花費大量的時間來查找合適的系統或源碼。然后要去測試&#xff0c;修復bug&#xff0c;一直到能夠正常的運營使用&#xff0c;花費的時間絕對不短&#xff0c;今天分享…

嵌入式學習的第三十五天-進程間通信-HTTP

TCP/IP協議模型&#xff1a;應用層&#xff1a;HTTP;傳輸層&#xff1a;TCP UDP;網絡層&#xff1a;IPv4 IPv6網絡接口層一、HTTP協議1. 萬維網WWW(World Wide Web) 世界范圍內的&#xff0c;聯機式的信息儲藏所。 萬維網解決了獲取互聯網上的數據時需要解決的以下問題&#x…

es 和 lucene 的區別

1. Lucene 是“發動機”&#xff0c;ES 是“整車”Lucene&#xff1a;只是一個 Java 庫&#xff0c;提供倒排索引、分詞、打分等底層能力。你必須自己寫代碼處理索引創建、更新、刪除、分片、分布式、故障恢復、API 封裝等所有邏輯。Elasticsearch&#xff1a;基于 Lucene 的分…

AS32S601 系列 MCU芯片GPIO Sink/Source 能力測試方法

一、引言隨著電子技術的飛速發展&#xff0c;微控制器&#xff08;MCU&#xff09;在工業控制、汽車電子、商業航天等眾多領域得到了廣泛應用。國科安芯推出的AS32S601 系列 MCU 以其卓越的性能和可靠性&#xff0c;成為了眾多設計工程師的首選之一。為了確保其在實際應用中的穩…

JAVA-08(2025.07.24學習記錄)

面向對象類package com.mm;public class Person {/*** 名詞-屬性*/String name;int age;double height;/*** 動詞-方法*/public void sleep(String add) {System.out.println("我在" add "睡覺");}public String introduce() {return "我的名字是&q…

地下隧道管廊結構健康監測系統 測點的布設及設備選型

隧道監測背景 隧道所處地下環境復雜&#xff0c;在施工過程中會面臨圍堰變形、拱頂沉降、凈空收斂、初襯應力變化、土體塌方等多種危險情況。在隧道營運過程中&#xff0c;也會受到材料退化、地震、人為破壞等因素影響&#xff0c;引發隧道主體結構的劣化和損壞&#xff0c;若不…

node.js卸載與安裝超詳細教程

文章目錄一、卸載Step1&#xff1a;通過控制面板刪除node版本Step2&#xff1a;刪除node的安裝目錄Step3&#xff1a;查找.npmrc文件是否存在&#xff0c;有就刪除。Step4&#xff1a;查看以下文件是否存在&#xff0c;有就刪除Step5&#xff1a;打開系統設置&#xff0c;檢查系…

飛算JavaAI“刪除接口信息” 功能:3 步清理冗余接口,讓管理效率翻倍

在飛算JavaAI的接口設計與管理流程中&#xff0c;“刪除接口信息” 功能為用戶提供了靈活調整接口方案的便利。該功能的存在&#xff0c;讓用戶能夠在接口生命周期的前期&#xff08;審核階段&#xff09;及時清理無需創建的接口&#xff0c;保證接口管理的簡潔性與高效性。一、…

行業熱點丨SimLab解決方案如何高效應對3D IC多物理場與ECAD建模挑戰?

半導體行業正快速超越傳統2D封裝技術&#xff0c;積極采用 3D集成電路&#xff08;3D ICs&#xff09;和2.5D 先進封裝等方案。這些技術通過異構芯粒、硅中介層和復雜多層布線實現更高性能與集成度。然而&#xff0c;由于電子計算機輔助設計&#xff08;ECAD&#xff09;數據規…

2025暑期—05神經網絡-BP網絡

按誤差反向傳播(簡稱誤差反傳)訓練的多層前饋網絡線性回歸或者分類不需要使用神經元&#xff0c;原有最小二程即可。求解J依次變小。使用泰勒展開&#xff0c;只看第一階。偏導是確定的&#xff0c;需要讓J小于0的delta WkWk構造完成后 J&#xff08;Wk1&#xff09;已知&#…

qml的信號槽機制

qml的信號槽機制和qtwidget差不多&#xff0c;但是使用方法不一樣&#xff0c;qtwidget一般直接用connect函數把信號和槽一綁定就完事了&#xff0c;qml分為自動綁定和手動綁定。信號自動綁定在一個組件里面定義一個信號&#xff0c;用signal定義&#xff0c;當事件觸發&#x…

Unity國際版下載鏈接分享(非c1國內版)

轉載Unity國際版下載鏈接分享&#xff08;非c1國內版&#xff09; - 嗶哩嗶哩 大家平時使用Unity注意一下會發現&#xff0c;現在我們下載的Unity版本號后面都一個c1&#xff0c;但是大家在B站學習時大神UP主們使用的Unity版本號大都是沒有c1的。 例如&#xff1a;我在用的是…

第4章唯一ID生成器——4.1 分布式唯一ID

在復雜的系統中&#xff0c;每個業務實體都需要使用ID做唯一標識&#xff0c;以方便進行數據操作。例如&#xff0c;每個用戶都有唯一的用戶ID&#xff0c;每條內容都有唯一的內容ID&#xff0c;甚至每條內容下的每條評論都有唯一的評論ID。 4.1.1 全局唯一與UUID 在互聯網還未…

圖論水題日記

cf1805D 題意 給定一棵樹&#xff0c;規定dis(u,v)≥kdis(u,v) \geq kdis(u,v)≥k時(u,v)(u,v)(u,v)之間存在一條無向邊&#xff0c;求k(1,2,...n)k(1,2,...n)k(1,2,...n)時圖中的連通塊個數 思路 前置知識&#xff1a;樹上一點到其最遠的點一定是樹直徑的兩個端點之一若一個點…