【.NET全棧】ASP.NET開發Web應用——站點導航技術

文章目錄

  • 前言
  • 一、站點地圖
    • 1、定義站點地圖文件
    • 2、使用SiteMapPath控件
    • 3、SiteMap類
    • 4、URL地址映射
  • 二、TreeView控件
    • 1、使用TreeView控件
    • 2、以編程的方式添加節點
    • 3、使用TreeView控件導航
    • 4、綁定到XML文件
    • 5、按需加載節點
    • 6、帶復選框的TreeView控件
  • 三、Menu控件
    • 1、使用Menu控件
    • 2、以編程的方式添加菜單項
    • 3、使用Menu控件導航
    • 4、一個站點地圖示例
    • 5、綁定到XML文件
    • 6、Menu控件樣式
    • 7、為Menu控件應用模板


前言

大型的企業級網站,可能有成百上千個網頁,導航變得十分重要。

好的導航系統能夠方便用戶在多個頁面間來回瀏覽,增加了應用程序的可交互性。

ASP.NET提供了內置的導航技術,讓開發人員創建站點導航變得輕松。

本章內容有:

  • ASP.NET中的站點地圖
  • 用于導航的高級服務器控件TreeView
  • 菜單和導航服務器控件Menu

一、站點地圖

用于定義站點結構。

ASP.NET中的站點地圖導航技術由以下三個文件組成:

  • 站點地圖XML文件
  • 綁定站點地圖XML文件的SiteMapDataSource數據源控件
  • 用于顯示站點地圖的導航控件

1、定義站點地圖文件

站點地圖是一個名為Web.sitemap的XML文件。

ASP.NET站點地圖的基本原理:
ASP.NET內置了一個成為站點地圖提供者的提供者類,名為XmlSiteMapProvider,該提供者能夠從XML中獲取信息。XmlSiteMapProvider將查找位于應用程序
根目錄中的Web.sitemap文件,然后提取該文件中的站點地圖數據并創建相應的SiteMap對象,SiteMapDataSource將使用這些SiteMap對象向導航控件提供導航信息。

Web.site必須位于應用程序目錄下,并且不能更改為其他名稱。

這里要建的導航結構為:
在這里插入圖片描述

接下來我們詳細記錄建立站點導航的過程:VS2019
(1)新建web項目
在這里插入圖片描述
在這里插入圖片描述
(2)新建要調用的產品、服務web窗體頁面

這里需要注意的是,現在項目上右鍵添加兩個文件夾,分別命名為Products、Services,然后分別在兩個文件夾鼠標右鍵建立Web窗體頁面。

在這里插入圖片描述
(3)新建一個首頁Web窗體頁面,命名為Default.aspx

在這里插入圖片描述
(4)項目右鍵添加-站點地圖,不要改名字!!!Web.sitemap這個名稱是固定的!!!

在這里插入圖片描述

在這里插入圖片描述
(5)接下來是各個頁面中的代碼:

Default.aspx頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SiteMap3.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>首頁</title>
</head>
<body><form id="form1" runat="server"><div>我是首頁!</div></form><asp:SiteMapPath ID="SiteMap" runat="server"></asp:SiteMapPath>
</body>
</html>

HardwareProduct.aspx頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="HardwareProduct.aspx.cs" Inherits="SiteMap3.Products.HardwareProduct" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>硬件產品</title>
</head>
<body><form id="form1" runat="server"><div>主機、顯示器、網絡終端、收銀機和ATM等設備在現代生活中扮演著重要角色。主機是計算機的核心部件,包含CPU、內存等,負責數據處理。顯示器則是將電子信號轉換為可視圖像的輸出設備,提供清晰的視覺體驗。網絡終端通過網絡獲取資源,簡化多用戶環境下的設備管理。收銀機廣泛應用于商業領域,實現高效準確的交易處理。ATM作為銀行自助服務終端,提供24小時便捷的金融服務。這些設備共同促進了信息化、自動化的發展,提升了工作效率與生活質量。</div></form><asp:SiteMapPath ID="SiteMap" runat="server"></asp:SiteMapPath>
</body>
</html>

SoftwareProduct.aspx頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SoftwareProduct.aspx.cs" Inherits="SiteMap3.Products.SoftwareProduct" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>軟件產品</title>
</head>
<body><form id="form1" runat="server"><div>ERP(企業資源規劃)、CRM(客戶關系管理)、Web系統以及Windows系統等,是現代企業運營與管理的基石。ERP系統整合了企業內部的各項資源,優化了業務流程,提升了管理效率;CRM系統則專注于客戶關系的維護與管理,幫助企業深入理解客戶需求,增強客戶滿意度與忠誠度。Web系統作為互聯網時代的產物,為企業搭建了線上服務平臺,實現了信息的快速傳遞與交互。而Windows系統,作為廣泛應用的操作系統,為上述各類軟件提供了穩定、易用的運行環境,支持著企業日常工作的順利進行。這些系統相互協作,共同推動了企業的數字化轉型與智能化升級。</div><asp:SiteMapPath ID="SiteMap" runat="server"></asp:SiteMapPath></form></body>
</html>

ServiceCenter.aspx頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ServiceCenter.aspx.cs" Inherits="SiteMap3.Services.ServiceCenter" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>服務中心</title>
</head>
<body><form id="form1" runat="server"><div>當您需要享受專業的服務與支持時,歡迎您直接步入本公司服務中心。我們的服務中心以客戶為中心,致力于為每一位訪客提供高效、便捷的登記服務體驗。一踏入中心,您將被溫馨的環境和專業的團隊所包圍。只需簡短的登記流程,即可迅速連接至所需的服務資源。無論是咨詢解答、技術支持還是產品維護,我們都將全力以赴,確保您的需求得到及時響應與滿足。在這里,每一次服務都是我們對品質的承諾,每一份滿意都是您對我們工作的肯定。選擇本公司服務中心,讓優質服務觸手可及。</div></form><asp:SiteMapPath ID="SiteMap" runat="server"></asp:SiteMapPath>
</body>
</html>

ServiceNote.aspx頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ServiceNote.aspx.cs" Inherits="SiteMap3.Services.ServiceNote" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>服務須知</title>
</head>
<body><form id="form1" runat="server"><div>在開始登記服務之前,我們誠摯地邀請您花幾分鐘時間仔細閱讀這里的條款與條件。這些條款不僅是我們服務提供的基礎框架,也是保障您權益與明確雙方責任的重要依據。通過認真閱讀,您將了解到服務的具體內容、范圍、限制以及可能涉及的費用情況。同時,條款中也明確了隱私保護政策,確保您的個人信息在處理過程中得到妥善保護。我們理解這些條款可能涉及較多細節,但請您放心,我們的目標是確保每一次服務都建立在透明、公正、相互尊重的基礎上。因此,在開始登記前,請您務必仔細閱讀并理解這些條款,以便更好地享受我們提供的服務。</div></form><asp:SiteMapPath ID="SiteMap" runat="server"></asp:SiteMapPath>
</body>
</html>

Web.sitemap站點地圖頁面

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" ><siteMapNode url="~/Default.aspx" title="首頁"  description="網站首頁"><!-- 這是產品分類節點 --><siteMapNode title="產品分類"  description="企業經營的產品"><siteMapNode url="~/Products/HardwareProduct.aspx" title="硬件產品"  description="包括主機、顯示器、網絡終端、收銀機、ATM等設備"/><siteMapNode url="~/Products/SoftwareProduct.aspx" title="軟件產品"  description="包括ERP、CRM、Web系統、Windows系統等"/></siteMapNode><siteMapNode title="售后服務"  description="軟硬件的售后服務"><siteMapNode url="~/Services/ServiceCenter.aspx" title="服務中心"  description="直接進入本公司服務中心登記服務"/><siteMapNode url="~/Services/ServiceNote.aspx" title="服務須知"  description="在開始登記前,先閱讀這里的條款"/></siteMapNode></siteMapNode>
</siteMap>

運行結果:

在這里插入圖片描述

2、使用SiteMapPath控件

SiteMapPath控件已經在上面的案例中使用,是在站點地圖結構、結構中對應的頁面做好以后,分別在各個頁面的窗體中加入SiteMapPath控件。

<asp:SiteMapPath ID="SiteMap" runat="server"></asp:SiteMapPath>

一個頁面中的添加如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SiteMap3.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>首頁</title>
</head>
<body><form id="form1" runat="server"><div>我是首頁!</div></form><asp:SiteMapPath ID="SiteMap" runat="server"></asp:SiteMapPath>
</body>
</html>

接下來介紹一些SiteMapPath控件的屬性:

屬性名稱屬性描述
ParentLevelsDisplay允許顯示的父節點的數量,默認情況下SiteMapPath控件顯示所有的父節點
PathDirection允許反轉SiteMapPath控件顯示的鏈接的順序,可選值有RootToCurrent,這是默認值,表示從根父級顯示到當前級。CurrentToRoot表示從當前頁面顯示到根級
PathSeparator指定用于分隔節點的字符串,默認的是“>”,可以指定任意的字符
RenderCurrentNodeAsLink是否允許將SiteMapPath描述的當前節點呈現為鏈接
ShowToolTips是否允許顯示工具提示
SiteMapProvider允許SiteMapPath控件指定其他的站點地圖提供者

SiteMapPath提供了很多的樣式控制選項,允許對其外觀進行精細的控制。除此以外,還可以對SiteMapPath控件應用模板來自定義外觀,以下列出所有的樣式及模板。

樣式模板說明
NodeStyleNodeTemplate所有除了根節點和當前節點的節點樣式
CurrentNodeStyleCurrentNodeTemplate當前節點的樣式
RootNodeStyleRootNodeTemplate根節點的樣式
PathSeparatorStylePathSeparatorTemplate節點之間分隔符的樣式

3、SiteMap類

使用SiteMapPath控件,開發人員不需要編寫代碼就可以在頁面中添加站點導航,也可以對站點地圖進行編程操作。ASP.NET公開了一個反應站點地圖結構的靜態
的SiteMapPath對象,該對象公開SiteMapNode對象的集合,用于表示站點中每個節點。

SiteMap對象中所有成員都是靜態的,因此無需實例化SiteMap對象。SiteMap自身只具有兩個與導航相關的屬性:

  • CurrentNode屬性:用于獲取當前的節點,返回SiteMapNode對象。
  • RootNode屬性:用于獲取根節點,返回SiteMapNode對象。

而SiteMap對象的成員SiteMapNode對象具有多個與導航相關的屬性:

屬性屬性說明
ParentNode返回當前節點的上一級節點,包含當前節點。如果是根節點,這個屬性返回一個null引用
ChildNode返回所有當前節點的子節點集合。可以通過檢查HasChildNodes屬性來判斷當前節點是否有子節點
PreviousSibling返回相同等級的上一個節點,如果不存在則返回null
NextSibling返回相同等級的下一個節點,如果不存在則返回null

在首頁中加入一個label控件,用來顯示通過SiteMap對象獲取的節點信息:(需要注意,之前加的那個SiteMapPath控件的名稱不能是SiteMap,不然就會和SiteMap類對象產生二義性,獲取不到屬性!!!!!!!!!!!!!!)
在這里插入圖片描述

代碼中加入遍歷站點地圖結構的節點信息代碼:

在這里插入圖片描述

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SiteMap3.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>首頁</title>
</head>
<body><form id="form1" runat="server"><div>我是首頁!</div><asp:SiteMapPath ID="SiteMapPath" runat="server"></asp:SiteMapPath><asp:Label ID="lbTree" runat="server" Text="Label"></asp:Label></form></body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace SiteMap3
{public partial class Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){// 獲取所有的站點地圖節點信息lbTree.Text = "當前節點信息:<br/>";lbTree.Text += SiteMap.CurrentNode.Title + "<br/>";lbTree.Text += SiteMap.CurrentNode.Description + "<br/>";if (SiteMap.CurrentNode.NextSibling != null){lbTree.Text += "同級節點的下一個節點信息:" + "<br/>";lbTree.Text += SiteMap.CurrentNode.NextSibling.Title + "<br/>";lbTree.Text += SiteMap.CurrentNode.NextSibling.Description + "<br/>";}}}
}

運行結果:運行結果是在軟件產品頁面中加入了遍歷的結果!!!!!!

在這里插入圖片描述

4、URL地址映射

URL地址映射就是在瀏覽器中給實際不想顯示的URL地址穿上一個馬甲,因此從實際URL映射到另一個對外顯示的URL地址。

ASP.NET可以在web.config配置文件中使用塊來配置URL地址映射。

下面是一個簡單的URL地址映射的示例代碼:

<?xml version="1.0" encoding="utf-8"?>
<!--有關如何配置 ASP.NET 應用程序的詳細信息,請訪問https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration><system.web><compilation debug="true" targetFramework="4.5.1" /><httpRuntime targetFramework="4.5.1" /><urlMappings enabled="true"><add url="~/Products/HardwareProduct.aspx" mappedUrl="~/Products/Default.aspx?hardwareproduct=default"/><add url="~/Services/ServiceCenter.aspx"mappedUrl="~/Services/Default.aspx?servicecenter=default"/></urlMappings></system.web><system.codedom><compilers><compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /><compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /></compilers></system.codedom>
</configuration>

但是ASP.NET中的地址映射有很大的不足,就是只能硬編碼地址,導致配置文件太大。網上已經有解決方法。

二、TreeView控件

TreeView就是不論是操作系統,還是應用程序的分支點目錄。

TreeView支持以下功能:

  • 數據綁定,允許控件的節點綁定到XML、表格或關系數據。
  • 站點導航,通過與SiteMapDataSource控件集成實現。
  • 節點文本既可以顯示為純文本也可以顯示為超鏈接。
  • 借助編程方式訪問TreeView對象模型以動態地創建樹、填充節點、設置屬性等。
  • 客戶端節點填充(在支持的瀏覽器上)。
  • 在每個節點旁顯示復選框的功能。
  • 通過主題、用戶定義的圖像和格式可以實現自定義外觀。

本節將討論使用TreeView控件開發ASP.NET應用程序的導航功能。

新建網站,添加一個TreeView控件。

1、使用TreeView控件

在設計模式下,拖一個TreeView控件,彈出設置框,自動套用格式下很多可以選擇的樹狀圖形式。
在這里插入圖片描述

選擇數據源,后面會講定義數據源,以及綁定數據源:

在這里插入圖片描述

如果已經添加了節點,可以編輯節點:

在這里插入圖片描述

自定義行圖標樣式:

在這里插入圖片描述

選擇顯示行或者不顯示行,就是連線:

在這里插入圖片描述

經過初始化的設置,回到標記模式中,看到已經增添了一些屬性:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TreeView.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title>
</head>
<body><form id="form1" runat="server"><div></div><asp:TreeView ID="TreeView1" runat="server" ImageSet="Arrows"><HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" /><NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" /><ParentNodeStyle Font-Bold="False" /><SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px" VerticalPadding="0px" /></asp:TreeView></form>
</body>
</html>

我們來手動輸入一些屬性,建立一些節點:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TreeView.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title>
</head>
<body><form id="form1" runat="server"><div></div><asp:TreeView ID="TreeView1" runat="server" ImageSet="Arrows"><ParentNodeStyle Font-Bold="False" /><HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" /><SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px" VerticalPadding="0px" /><Nodes><asp:TreeNode Text="軟件開發系列圖書" Value="軟件開發系列圖書"><asp:TreeNode Text=".NET版" Value=".NET版"><asp:TreeNode Text="C# 2008程序設計" Value=" 2008程序設計"></asp:TreeNode><asp:TreeNode Text="ASP.NET 4.0從入門到精通" Value="ASP.NET 4.0從入門到精通"></asp:TreeNode><asp:TreeNode Text="SliverLight 2.0開發人員指南" Value="SliverLight 2.0開發人員指南"></asp:TreeNode><asp:TreeNode Text="WCF程序設計" Value="WCF程序設計"></asp:TreeNode><asp:TreeNode Text="WF本質論" Value="WF本質論"></asp:TreeNode></asp:TreeNode></asp:TreeNode></Nodes><NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" /></asp:TreeView></form>
</body>
</html>

運行結果:
在這里插入圖片描述

TreeView的屬性:

屬性屬性說明
Tetx顯示在節點中的文本
ToolTip當鼠標懸停在節點上面時顯示的提示信息
Value保存節點的值,節點的值是一種不可見的附件數據,用于保存節點的附加信息
NavigateUrl當單擊節點時,節點所鏈接的URL路徑
Target如果NavigateUrl被設置,用這個屬性設置打開的目標窗口
ImageUrl顯示在節點前面的圖像URL
ImageToolTip顯示在節點前面的圖片的提示信息

2、以編程的方式添加節點

編程方式給TreeView添加節點:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace TreeView
{public partial class Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){// 以編程的方式給TreeView對象添加節點// 新建一個TreeNode對象TreeNode rootNode = new TreeNode("軟件開發系列圖書");// 將rootNode對象添加到TreeView對象的Nodes節點,這是必須的,否則TreeView將不會呈現節點TreeView1.Nodes.Add(rootNode);// 繼續添加子節點TreeNode childNode = new TreeNode(".NET版");childNode.ChildNodes.Add(new TreeNode("C# 2008程序設計"));childNode.ChildNodes.Add(new TreeNode("ASP.NET從入門到精通"));childNode.ChildNodes.Add(new TreeNode("SilverLight2.0開發人員指南"));childNode.ChildNodes.Add(new TreeNode("WCF程序設計"));rootNode.ChildNodes.Add(childNode);}}
}

運行結果:
在這里插入圖片描述

3、使用TreeView控件導航

首先給項目中加入之前寫的這個Web.sitemap站點導航文件。

在這里插入圖片描述
再加入一個TreeView控件:

在這里插入圖片描述

窗體頁面設計代碼:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TreeView.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title>
</head>
<body><form id="form1" runat="server"><div></div><asp:TreeView ID="TreeView1" runat="server" ImageSet="Arrows"><ParentNodeStyle Font-Bold="False" /><HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" /><SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px" VerticalPadding="0px" /><%--    <Nodes><asp:TreeNode Text="軟件開發系列圖書" Value="軟件開發系列圖書"><asp:TreeNode Text=".NET版" Value=".NET版"><asp:TreeNode Text="C# 2008程序設計" Value=" 2008程序設計"></asp:TreeNode><asp:TreeNode Text="ASP.NET 4.0從入門到精通" Value="ASP.NET 4.0從入門到精通"></asp:TreeNode><asp:TreeNode Text="SliverLight 2.0開發人員指南" Value="SliverLight 2.0開發人員指南"></asp:TreeNode><asp:TreeNode Text="WCF程序設計" Value="WCF程序設計"></asp:TreeNode><asp:TreeNode Text="WF本質論" Value="WF本質論"></asp:TreeNode></asp:TreeNode></asp:TreeNode></Nodes>--%><NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" /></asp:TreeView><asp:TreeView ID="TreeView2" runat="server" ImageSet="Contacts" NodeIndent="10"><HoverNodeStyle Font-Underline="False" /><NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" /><ParentNodeStyle Font-Bold="True" ForeColor="#5555DD" /><SelectedNodeStyle Font-Underline="True" HorizontalPadding="0px" VerticalPadding="0px" /></asp:TreeView><asp:TreeView ID="TreeView3" runat="server" DataSourceID="SiteMapDataSource1"></asp:TreeView><asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" /></form>
</body>
</html>

后臺代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace TreeView
{public partial class Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){// 以編程的方式給TreeView對象添加節點//====================================第一種:直接編程添加TreeView節點================================================// 新建一個TreeNode對象TreeNode rootNode = new TreeNode("軟件開發系列圖書");// 將rootNode對象添加到TreeView對象的Nodes節點,這是必須的,否則TreeView將不會呈現節點TreeView1.Nodes.Add(rootNode);// 繼續添加子節點TreeNode childNode = new TreeNode(".NET版");childNode.ChildNodes.Add(new TreeNode("C# 2008程序設計"));childNode.ChildNodes.Add(new TreeNode("ASP.NET從入門到精通"));childNode.ChildNodes.Add(new TreeNode("SilverLight2.0開發人員指南"));childNode.ChildNodes.Add(new TreeNode("WCF程序設計"));rootNode.ChildNodes.Add(childNode);//======================================第二種,通過編程綁定站點地圖信息添加TreeView節點==============================================// 以下是TreeView2的使用導航功能的代碼// 初始化根節點TreeNode node = new TreeNode("首頁");// 調用地柜方法遍歷添加節點LoadSiteMap(SiteMap.RootNode, node);TreeView2.Nodes.Add(node);//======================================第三種,通過編程綁定SiteMapDataSource控件添加TreeView節點=====================================// 設計界面上增加了一個TreeView3,并新增一個SiteMapDataSource1,然后將二者通過數據源選項綁定}protected void LoadSiteMap(SiteMapNode node, TreeNode tvNode){// 獲取根節點的子節點int count = node.ChildNodes.Count;// 這里循環遍歷節點for (int i = 0; i < count; i++){// 獲取根節點的子節點SiteMapNode smNode = node.ChildNodes[i];// 從子節點獲取導航信息TreeNode tempNode = new TreeNode(smNode.Title, "", "", smNode.Url, "");tvNode.ChildNodes.Add(tempNode);if (smNode.HasChildNodes){// 如果當前節點還有子節點,則調用遞歸過程進行遍歷LoadSiteMap(smNode, tempNode);}}}}
}

運行結果:

在這里插入圖片描述

4、綁定到XML文件

TreeView具有顯示層次結構數據的優勢,而開發人員通常使用XML文件來保存層次結構的數據,TreeView控件通過與XmlDataSource控件的結合,使綁定XML文件變得非常簡單。

在這里插入圖片描述
在這里插入圖片描述

XML文件代碼:

<?xml version="1.0" encoding="utf-8" ?> 
<Books Title="圖書展示區"><Category id="software" text="軟件編程類"><book id="book1" text="ASP.NET程序設計"/><book id="book2" text="C# 2008 網絡技術詳解"/></Category><Category id="hardware" text="硬件編程類"><book id="book3" text="MySQL數據庫設計" /><book id="book4" text="Linux設備驅動程序開發"/></Category>
</Books>

TreeView4與XmlDataSource控件代碼:

<asp:TreeView ID="TreeView4" runat="server" ImageSet="XPFileExplorer" NodeIndent="15" DataSourceID="XmlDataSource1"><HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" /><NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px" NodeSpacing="0px" VerticalPadding="2px" /><SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px" VerticalPadding="0px" /><ParentNodeStyle Font-Bold="False" /></asp:TreeView><asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Book.xml" OnTransforming="XmlDataSource1_Transforming"></asp:XmlDataSource>

這樣給TreeView綁定數據源看起來挺簡單的,不過不能直接綁定到SqlDataSource或者ObjectDataSource控件。

5、按需加載節點

如果要加在到TreeView控件中的數據量非常大,一次性加載將顯著增加服務器端的負載和客戶端內存的占比量,并且會造成請求的延遲。TreeView
控件提供了按需加載的特性來解決這個問題。在首次加載時,TreeView只顯示頂級節點的少量數據,當用戶單擊TreeView中的展開節點圖標時,將再次從服務器端加載所需要的的數據。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="PopulateOnDemand.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title>
</head>
<body><form id="form1" runat="server"><div></div><asp:TreeView ID="TreeView1" runat="server" OnTreeNodePopulate="TreeView1_TreeNodePopulate"><Nodes><asp:TreeNode PopulateOnDemand="true" Text="按需加載頂層節點" Value="按需加載頂層節點"></asp:TreeNode></Nodes></asp:TreeView></form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace PopulateOnDemand
{public partial class Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e){for (int i = 0; i < 3; i++){TreeNode newNode = new TreeNode();newNode.Text = "動態加載的節點" + i.ToString();// 這里將新建的節點的PopulateOnDemand屬性也設置為True,將會形成一個無限遞歸newNode.PopulateOnDemand = true;// TreeNodeEventArgs中的Node屬性表示當前的節點e.Node.ChildNodes.Add(newNode);}}}
}

6、帶復選框的TreeView控件

將綁定節點的ShowCheckBoxes屬性設置為true進行節點的復選設置。距離例子在實際應用中再查詢吧。

三、Menu控件

ASP.NET提供了另一個重量級的導航控件Meun。使用該控件,開發人員可以在網頁上模擬Windows的菜單導航效果。ASP.NET的Menu有兩種模式:

  • 靜態模式:每個菜單項是完全分開的,用戶可以點擊菜單中的任何菜單項。
  • 動態模式:默認值顯示部分菜單內容,當用戶移動鼠標到靜態內容頁上時,彈出子菜單項。

1、使用Menu控件

新建Menu項目并拖入Menu控件,初始化設置:

在這里插入圖片描述

在設計模式下,手動寫入靜態的菜單項:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Menu.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title>
</head>
<body><form id="form1" runat="server"><div></div><asp:Menu ID="Menu1" runat="server" BackColor="#FFFBD6" DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#990000" StaticSubMenuIndent="10px"><DynamicHoverStyle BackColor="#990000" ForeColor="White" /><DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /><DynamicMenuStyle BackColor="#FFFBD6" /><DynamicSelectedStyle BackColor="#FFCC66" /><StaticHoverStyle BackColor="#990000" ForeColor="White" /><StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /><StaticSelectedStyle BackColor="#FFCC66" /><Items><asp:MenuItem Text="首頁" Value="首頁"></asp:MenuItem><asp:MenuItem Text="公司介紹" Value="公司介紹"><asp:MenuItem Text="公司信息" Value="公司信息"></asp:MenuItem><asp:MenuItem Text="公司規模" Value="公司規模"></asp:MenuItem><asp:MenuItem Text="公司人員" Value="公司人員"></asp:MenuItem></asp:MenuItem><asp:MenuItem Text="產品信息" Value="產品信息"><asp:MenuItem Text="硬件產品" Value="硬件產品"></asp:MenuItem><asp:MenuItem Text="軟件產品" Value="軟件產品"></asp:MenuItem><asp:MenuItem Text="專利產品" Value="專利產品"></asp:MenuItem></asp:MenuItem><asp:MenuItem Text="服務中心" Value="服務中心"><asp:MenuItem Text="服務事項" Value="服務事項"></asp:MenuItem><asp:MenuItem Text="服務申報" Value="服務申報"></asp:MenuItem><asp:MenuItem Text="服務建議" Value="服務建議"></asp:MenuItem></asp:MenuItem><asp:MenuItem Text="關于" Value="關于"></asp:MenuItem></Items></asp:Menu></form>
</body>
</html>

運行結果:

在這里插入圖片描述

Menu兩個重要屬性控制菜單是靜態顯示還是動態顯示:

屬性說明
StaticDisplayLevels控制靜態顯示的菜單層次,該屬性默認值為1,表示只顯示asp:MenuItem中第一層嵌套的節點
MaxiumDynamicDisplayLevels控制動態顯示的節點層次數。默認值是3,表示可以動態地彈出3個層次的菜單。如果設置值為0則不動態顯示任何菜單項。

通常這兩個屬性可以搭配使用,以獲得菜單的靜態和動態的顯示效果。

每個MenuItem有多個屬性。如下:

屬性說明
Text顯示在每個菜單項上的文本
ToolTip當鼠標懸停在菜單上時顯示的信息
Value存儲一個附加的菜單項的數據
NavigateUrl當單擊菜單項時,自動跳轉到的Url地址。也可以處理Menu.MenuItemClick事件執行相應的行為
Target當NavigateUrl屬性設置后,Target屬性用于設置目標Url打開的框架或窗體
Selectable指定菜單項是否可以被用戶選擇
ImageUrl在菜單項的文本左線顯示的圖片Url
PopOutImageUrl如果包含子菜單,則在菜單項文本的右側顯示的頭像
SeparatorUrl菜單項分隔項的圖片Url

2、以編程的方式添加菜單項

Menu控件提供了Items集合的屬性,這是一個MenuItemCollection集合類型的屬性,可以向該屬性添加菜單項來實現動態添加菜單項的效果。

我們將原來靜態添加的菜單項先注釋,然后再頁面的Page_Load中動態添加:

窗體代碼:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Menu.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title>
</head>
<body><form id="form1" runat="server"><div></div><asp:Menu ID="Menu1" runat="server" BackColor="#FFFBD6" DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#990000" StaticSubMenuIndent="10px"><DynamicHoverStyle BackColor="#990000" ForeColor="White" /><DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /><DynamicMenuStyle BackColor="#FFFBD6" /><DynamicSelectedStyle BackColor="#FFCC66" /><StaticHoverStyle BackColor="#990000" ForeColor="White" /><StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /><StaticSelectedStyle BackColor="#FFCC66" /><%-- <Items><asp:MenuItem Text="首頁" Value="首頁"></asp:MenuItem><asp:MenuItem Text="公司介紹" Value="公司介紹"><asp:MenuItem Text="公司信息" Value="公司信息"></asp:MenuItem><asp:MenuItem Text="公司規模" Value="公司規模"></asp:MenuItem><asp:MenuItem Text="公司人員" Value="公司人員"></asp:MenuItem></asp:MenuItem><asp:MenuItem Text="產品信息" Value="產品信息"><asp:MenuItem Text="硬件產品" Value="硬件產品"></asp:MenuItem><asp:MenuItem Text="軟件產品" Value="軟件產品"></asp:MenuItem><asp:MenuItem Text="專利產品" Value="專利產品"></asp:MenuItem></asp:MenuItem><asp:MenuItem Text="服務中心" Value="服務中心"><asp:MenuItem Text="服務事項" Value="服務事項"></asp:MenuItem><asp:MenuItem Text="服務申報" Value="服務申報"></asp:MenuItem><asp:MenuItem Text="服務建議" Value="服務建議"></asp:MenuItem></asp:MenuItem><asp:MenuItem Text="關于" Value="關于"></asp:MenuItem></Items>--%></asp:Menu></form>
</body>
</html>

后臺代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace Menu
{public partial class Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){MenuItem mi = new MenuItem();mi.Text = "首頁";mi.ToolTip = "顯示網站的首頁";Menu1.Items.Add(mi);MenuItem companymi = new MenuItem("公司信息");companymi.ChildItems.Add(new MenuItem("公司信息"));companymi.ChildItems.Add(new MenuItem("公司規模"));companymi.ChildItems.Add(new MenuItem("公司人員"));Menu1.Items.Add(companymi);MenuItem productmi = new MenuItem("產品信息");productmi.ChildItems.Add(new MenuItem("硬件產品"));productmi.ChildItems.Add(new MenuItem("軟件產品"));productmi.ChildItems.Add(new MenuItem("專利產品"));Menu1.Items.Add(productmi);MenuItem servicemi = new MenuItem("服務信息");servicemi.ChildItems.Add(new MenuItem("服務事項"));servicemi.ChildItems.Add(new MenuItem("服務申請"));servicemi.ChildItems.Add(new MenuItem("服務建議"));Menu1.Items.Add(servicemi);MenuItem aboutmi = new MenuItem("關于");Menu1.Items.Add(aboutmi);}}
}

運行結果:

在這里插入圖片描述

3、使用Menu控件導航

Menu控件作為一種導航控件,同樣可以輕松綁定到SiteMapDataSource控件來實現站點導航。

新建項目MenuNavigate:

在這里插入圖片描述

Web.site站點地圖文件代碼:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" ><siteMapNode url="~/Default.aspx" title="首頁"  description="網站首頁"><!-- 這是產品分類節點 --><siteMapNode title="產品分類"  description="企業經營的產品"><siteMapNode url="~/Products/HardwareProduct.aspx" title="硬件產品"  description="包括主機、顯示器、網絡終端、收銀機、ATM等設備"/><siteMapNode url="~/Products/SoftwareProduct.aspx" title="軟件產品"  description="包括ERP、CRM、Web系統、Windows系統等"/></siteMapNode><siteMapNode title="售后服務"  description="軟硬件的售后服務"><siteMapNode url="~/Services/ServiceCenter.aspx" title="服務中心"  description="直接進入本公司服務中心登記服務"/><siteMapNode url="~/Services/ServiceNote.aspx" title="服務須知"  description="在開始登記前,先閱讀這里的條款"/></siteMapNode></siteMapNode>
</siteMap>

運行結果:

在這里插入圖片描述

4、一個站點地圖示例

在這里插入圖片描述

站點地圖Web.sitemap中定義的站點導航代碼:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" ><siteMapNode url="" title="首頁"  description=""><siteMapNode title="產品"><siteMapNode url="Default.aspx?node=hardware" title="硬件"><siteMapNode title="硬件"/><siteMapNode title="鍵盤"/><siteMapNode title="網卡"/><siteMapNode title="顯示器"/><siteMapNode title="整機"/></siteMapNode><siteMapNode url="Default.aspx?node=software" title="軟件"><siteMapNode title="電子表格"/><siteMapNode title="文檔處理器"/><siteMapNode title="電子郵件"/><siteMapNode title="圖像處理"/><siteMapNode title="游戲軟件"/></siteMapNode><siteMapNode url="Default.aspx?node=books" title="書籍"><siteMapNode title="編程"/><siteMapNode title="調試"/><siteMapNode title="測試"/><siteMapNode title="Web應用程序"/><siteMapNode title="WinForm應用程序"/></siteMapNode></siteMapNode><siteMapNode title="服務"><siteMapNode url="Default.aspx?node=consulting" title="咨詢"><siteMapNode title="流程"/><siteMapNode title="管理"/><siteMapNode title="招聘"/></siteMapNode><siteMapNode url="Default.aspx?node=development" title="開發"><siteMapNode title="Web應用程序"/><siteMapNode title="企業級應用程序"/><siteMapNode title="數據庫應用程序"/></siteMapNode></siteMapNode><siteMapNode title="支持"><siteMapNode url="Default.aspx?node=drivers" title="驅動"><siteMapNode title="聲卡"/><siteMapNode title="網絡"/><siteMapNode title="打印機"/><siteMapNode title="Medom"/></siteMapNode><siteMapNode url="Default.aspx?node=manuals" title="手冊"><siteMapNode title="應用程序"/><siteMapNode title="故障診斷"/><siteMapNode title="安裝"/><siteMapNode title="Internet"/></siteMapNode><siteMapNode url="Default.aspx?node=updates" title="更新"><siteMapNode title="發行版"/><siteMapNode title="游戲包"/></siteMapNode></siteMapNode></siteMapNode>
</siteMap>

在這里插入圖片描述

5、綁定到XML文件

在這里插入圖片描述
在這里插入圖片描述

這里綁定的項還要綁定一下:

在這里插入圖片描述

XML文件代碼:

<?xml version="1.0" encoding="utf-8" ?> 
<Books Title="軟硬件書籍區"><Category id="category1" title="軟件書籍區"><book id="book1" title="ASP.NET程序設計"></book><book id="book2" title="C#程序設計"></book><book id="book3" title="DELPHI2009程序設計"></book><book id="book4" title="C++程序設計"></book><book id="book5" title="Java程序設計"></book></Category><Category id="category2" title="硬件書籍區"><book id="book1" title="PC升級與維護大全"></book><book id="book2" title="TCP/IP路由技術"></book><book id="book3" title="思科教程"></book><book id="book4" title="匯編語言程序設計"></book><book id="book5" title="單片機程序設計"></book></Category>
</Books>

窗體設計代碼:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="BingdingToXml.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title>
</head>
<body><form id="form1" runat="server"><div></div><asp:Menu ID="Menu1" runat="server" BackColor="#E3EAEB" DataSourceID="XmlDataSource1" DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#666666" Orientation="Horizontal" StaticSubMenuIndent="10px"><DynamicHoverStyle BackColor="#666666" ForeColor="White" /><DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /><DynamicMenuStyle BackColor="#E3EAEB" /><DynamicSelectedStyle BackColor="#1C5E55" /><StaticHoverStyle BackColor="#666666" ForeColor="White" /><StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /><StaticSelectedStyle BackColor="#1C5E55" /></asp:Menu><asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Books.xml"></asp:XmlDataSource></form>
</body>
</html>

運行結果:

在這里插入圖片描述

6、Menu控件樣式

Menu控件與TreeView控件類似,提供了大量的外觀控制項。

以下是Menu控件的樣式:

靜態模式樣式動態模式樣式樣式說明
StaticMenuStyleDynamicMenuStyle設置Menu控件的整個外觀樣式
StaticMenuItemStyleDynamicMenuItemStyle設置單個菜單項的樣式
StaticSelectedStyleDynamicSelectedStyle設置所選擇的菜單項的樣式
StaticHoverStyleDynamicHoverStyle設置當鼠標懸停在菜單項上時的樣式

7、為Menu控件應用模板

ASP.NET中的Menu控件是一個強大的導航控件,允許開發人員創建復雜的菜單結構。通過使用模板(Templates),你可以自定義Menu控件的外觀和行為,以滿足特定的需求。以下是如何在ASP.NET中為Menu控件使用模板的詳細介紹。

    1. 基本概念

ASP.NET Menu控件支持以下幾種模板:

StaticItemTemplate:用于靜態菜單項的模板。
DynamicItemTemplate:用于動態菜單項的模板。
StaticMenuItemTemplate:用于靜態菜單項的容器模板。
DynamicMenuItemTemplate:用于動態菜單項的容器模板。

    1. 示例代碼

以下是一個示例,展示如何為Menu控件使用模板:

2.1. ASPX頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MenuTemplate.aspx.cs" Inherits="MenuTemplate" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>Menu Template Example</title><style>.menu-item {padding: 5px;background-color: #f0f0f0;border: 1px solid #ccc;margin: 2px;}.menu-item:hover {background-color: #e0e0e0;}</style>
</head>
<body><form id="form1" runat="server"><asp:Menu ID="Menu1" runat="server" Orientation="Horizontal"><StaticItemTemplate><div class="menu-item"><%# Eval("Text") %></div></StaticItemTemplate><DynamicItemTemplate><div class="menu-item"><%# Eval("Text") %></div></DynamicItemTemplate></asp:Menu></form>
</body>
</html>

2.2. 代碼隱藏文件(C#)

using System;
using System.Web.UI.WebControls;public partial class MenuTemplate : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){BindMenu();}}private void BindMenu(){MenuItem home = new MenuItem("Home", "Home");MenuItem about = new MenuItem("About", "About");MenuItem services = new MenuItem("Services", "Services");MenuItem contact = new MenuItem("Contact", "Contact");Menu1.Items.Add(home);Menu1.Items.Add(about);Menu1.Items.Add(services);Menu1.Items.Add(contact);MenuItem webDesign = new MenuItem("Web Design", "WebDesign");MenuItem seo = new MenuItem("SEO", "SEO");services.ChildItems.Add(webDesign);services.ChildItems.Add(seo);}
}

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

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

相關文章

Hutool-Guava

目錄 一、Guava 二、Hutool 三、區別與聯系 四、使用場景 五、Guava工具類 1.集合工具類 2.字符串工具類 3.并發工具類 六、Hutool 1.字符串工具類 2.文件工具類 Hutool 和 Guava 都是 Java 開發中非常實用的工具庫&#xff0c;它們提供了許多方便的工具類和方法&am…

字節抖音電商 后端開發崗位 一面

筆者整理答案&#xff0c;以供參考 自我介紹 項目&#xff08;20分鐘&#xff09; RocketMQ延時消息的底層實現 回答&#xff1a; 延時消息的實現主要依賴于RocketMQ中的定時任務機制。消息被發送到Broker時&#xff0c;會先存儲在一個特定的延時消息隊列中。Broker會定時掃…

c++ extern 關鍵字

C中的extern關鍵字和跨語言互操作 變量的聲明與定義 extern關鍵字用于聲明在另一個翻譯單元&#xff08;文件&#xff09;中定義的變量或函數。通過extern關鍵字&#xff0c;可以在多個文件中訪問全局變量或函數。 變量聲明示例 文件&#xff1a;main.cpp #include <io…

chatglm2-6b-prompt嘗試

參考https://cloud.tencent.com/developer/article/2426296 chatglm2-6b&#xff0c;通過prompt來實現zero-shot/fewshot的自然語言處理任務 import json import re import os from modelscope.utils.constant import Tasks from modelscope import Model from modelscope.pi…

再議擴散模型

目錄 一、基礎知識 1、數學期望 2、概率表示 3、KL散度 二、擴散過程 三、理想的去噪過程 四、真實的去噪過程 五、噪聲生成 導言 筆者早些時候曾粗略看過擴散模型的流程&#xff0c;但對于底層算法&#xff08;尤其是概率論方面&#xff09;&#xff0c;理解不夠透徹…

pytorch學習(五)tensorboard使用

1. 創建環境 首先創建一個環境: conda create -n pytorch conda activate pytorch 然后安裝tensorboard pip install tensorboard 安裝opencv pip install opencv-python 2. 簡單的案例 標量和圖像的顯示&#xff1a; 2.1標量實現的方法是add_scalar,第一個參數是給顯…

探索Puppeteer的強大功能:抓取隱藏內容

背景/引言 在現代網頁設計中&#xff0c;動態內容和隱藏元素的使用越來越普遍&#xff0c;這些內容往往只有在特定的用戶交互或條件下才會顯示出來。為了有效地獲取這些隱藏內容&#xff0c;傳統的靜態爬蟲技術往往力不從心。Puppeteer&#xff0c;作為一個強大的無頭瀏覽器工…

印尼語翻譯通:AI驅動的智能翻譯與語言學習助手

在這個多元文化交織的世界中&#xff0c;語言是連接我們的橋梁。印尼語翻譯通&#xff0c;一款專為打破語言障礙而生的智能翻譯軟件&#xff0c;讓您與印尼語的世界輕松接軌。無論是商務出差、學術研究&#xff0c;還是探索印尼豐富的文化遺產&#xff0c;印尼語翻譯通都是您的…

代碼隨想錄算法訓練營第三十六天|1049. 最后一塊石頭的重量 II 、 494. 目標和 、 474.一和零

1049. 最后一塊石頭的重量 II 分成兩堆石頭&#xff0c;一堆石頭的總重量是dp[target]&#xff0c;另一堆就是sum - dp[target]。 在計算target的時候&#xff0c;target sum / 2 因為是向下取整&#xff0c;所以sum - dp[target] 一定是大于等于dp[target]的。 那么相撞之…

.NET C# 使用 iText 生成PDF

.NET C# 使用 iText 生成PDF 文章目錄 .NET C# 使用 iText 生成PDF1 安裝 iText 7 庫&#xff1a;2 變量定義3 創建一個PDF4 段落5 旋轉文本6 代碼塊7 外部鏈接8 內部鏈接9 表格10 注釋11 線條12 二維碼13 嵌入圖像14 列表15 設置背景16 頁眉17 頁腳18 事件19 水印20 分欄21 源…

老古董Lisp(1):粗魯先生Lisp再出發

粗魯先生Lisp再出發 開始的原因 目標和夢想是最近考慮的一個問題。什么是目標&#xff1f;什么是夢想&#xff1f;夢想可以激勵改變&#xff0c;目標才能實現改變。 開始這個部分的時候&#xff0c;我的夢想是什么&#xff1f;我的目標是什么&#xff1f;我想要什么&#xf…

libwebrtc.a+exosip連接fS 環境部署tips

//運行FS服務器 sudo ./freeswitch -nc -nonat //公網sudo ./freeswitch //運行客戶端 sudo ./fs_cli //加載模塊 load mod_av load mod_verto0.Invite交互過程 1.fs碼率設置 2.用戶密碼改動 3.數字簽名的摘要 4.FS收不到ACK 5.公網部署 6.查看frewswitch都占用哪些端口 7.日志…

Java(二十一)---棧的使用和模擬實現

文章目錄 前言1.什么是棧(Stack)?2. 棧的模擬實現3.stack的使用![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/80c82d22f3ee49cfaa2915d1c961573e.png)4.關于棧的oj題4.1.有效的括號4.2.逆波蘭表達式4.3.棧的壓入、彈出序列4.4.最小棧 前言 前面幾篇我們學習了順序…

Vue--Router(路由)

目錄 一 Router(路由) 1.作用 2.實現步驟 3.注意 一 Router(路由) 1.作用 Router又叫做路由&#xff0c;簡單來說&#xff0c;就是用來實現vue的頁面之間跳轉的。 我們都知道&#xff0c;使用vue必然會涉及到很多個組件&#xff0c;也就是頁面&#xff0c;而頁面之間肯定需…

RK3588讀取不到顯示器edid

問題描述 3588HDMIout接老的顯示器或者HDMI轉DVI接DVI顯示器顯示不了或者顯示內容是彩色條紋,但是這種顯示器測試過如果接筆記本或者主機是可以直接顯示的。這一類問題是HDMI下的i2c與顯示器通訊沒成功,讀取不到設備的edid。問題包括全志的H3 、AML的S905都有遇到 測試環境…

Qt-事件與信號

事件和信號的區別在于&#xff0c;事件通常是由窗口系統或應用程序產生的&#xff0c;信號則是Qt定義或用戶自定義的。Qt為界面組件定義的信號往往通常是對事件的封裝&#xff0c;如QPushButton的clicked()信號可以看做對QEvent::MouseButtonRelease類事件的封裝。 在使用界面組…

【QGroundControl二次開發】二.使用QT編譯QGC(Windows)

【QGroundControl二次開發】一.開發環境準備&#xff08;Windows&#xff09; 二. 使用QT編譯QGC&#xff08;Windows&#xff09; 2.1 打開QT Creator&#xff0c;選擇打開項目&#xff0c;打開之前下載的QGC項目源碼。 編譯器選擇Desktop Qt 6.6.3 MSVC2019 64bit。 點擊運…

vue3-tree-org實現帶照片的組織架構圖

官方文檔&#xff1a;vue3-tree-org 顯示照片需要注意的地方 使用步驟 下載 npm install vue3-tree-org --save 在main.js中引入 import "vue3-tree-org/lib/vue3-tree-org.css"; import vue3TreeOrg from vue3-tree-org;app.use(vue3TreeOrg) 實現代碼 <tem…

level 6 day2 網絡基礎2

1.socket&#xff08;三種套接字&#xff1a;認真看&#xff09; 套接字就是在這個應用空間和內核空間的一個接口&#xff0c;如下圖 原始套接字可以從應用層直接訪問到網絡層&#xff0c;跳過了傳輸層&#xff0c;比如在ubtan里面直接ping 一個ip地址,他沒有經過TCP或者UDP的數…

解決TypeError: __init__() takes 1 positional argument but 2 were given

問題描述&#xff1a; 如下圖&#xff0c;在使用torch.nn.Sigmoid非線性激活時報錯 源代碼&#xff1a; class testrelu(nn.Module):def __init__(self):super().__init__()self.sigmoid Sigmoid()def forward(self, input):output self.sigmoid(input)return outputwriter…