Một cách thông thường để duy trì menu trang web thường là file XML bên ngoài. Dữ liệu XML có cấu trúc tự nhiên thứ bậc, nó tương thích để đại diện cho cấu trúc của trình đơn phân cấp. Tập tin XML có thể được liên kết với Control <asp:Menu>
Menu trang web bên ngoài được biết đến như bản đồ trang web . Nó được làm sẵn cho Control <asp:Menu> thông qua Control <asp: SiteMapDataSource>, như dữ liệu AccessDataSource qua GridView, DetailsView, FormView, hoặc các ràng buộc điều khiển hiển thị thông tin. Định dạng chung của nó được hiển thị dưới đây.
<asp:SiteMapDataSource id="id" Runat="Server"
ShowStartingNode="True|False"
SiteMapProvider="provider"
/>
Các SiteMapDataSource sẽ tìm tập tin đặc biệt có tên web.sitemap để hiển thị trình đơn trang web XML mã hóa. Sau đó, Control SiteMapDataSource kết hợp với Control Menu thông qua thuộc tính DataSourceID.
<asp:SiteMapDataSource id="SiteMap" Runat="Server/>
<asp:Menu id="NavigationMenu" Runat="Server"
DataSourceID="SiteMap"
...
/>
Control Menu liên quan đến Control SiteMapDataSource được liên kết với tệp tin web.sitemap.
Tập tin web.sitemap
Tập tin web.sitemap đại diện cho đơn phân cấp mã hoá trong cú pháp đặc biệt tạo ra bản đồ trang web. Các mã sau đây cho thấy bản đồ trang web cho cấu trúc menu được sử dụng trong ví dụ trước.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="Danh mục" description="Danh mục">
<siteMapNode url="" title="Quản Lý Khoa" description="Quản Lý Khoa" />
<siteMapNode url="" title="Quản Lý Phòng" description="Quản Lý Phòng" />
<siteMapNode url="" title="Quản Lý Thuốc" description="Quản Lý Thuốc" />
<siteMapNode url="" title="Quản Lý Người Dùng" description="Quản Lý Người Dùng" />
</siteMapNode>
</siteMap>
Tập tin XML phải có thẻ <sitemap> bao quanh tất cả nội dung. Bên trong thẻ này là thẻ nút gốc <siteMapNode> trong đó thêm thẻ đại diện <siteMapNode> cho cấu trúc phân cấp của mục trình đơn. Các item này có thuộc tính tiêu đề cho các nhãn văn bản xuất hiện trong trình đơn, cùng với thuộc tính địa chỉ cho các URL có liên quan đến trang đó. Các URL phải liên hệ với các thư mục gốc (thư mục Web ảo) của trang web vì tập tin web.sitemap phải xuất hiện trong thư mục web gốc.
Một khi tập tin web.sitemap được đặt vào thư mục Web gốc nó sẽ tự động xác định bằng cách gọi Control SiteMapDataSource để cung cấp một trình đơn cho Control <asp:Menu> liên kết với nó. Trong ví dụ sau đây, kỹ thuật này được sử dụng để cung cấp các mục trình đơn cho Control Menu hoạt động hệt menu cứng mã hóa trước đó.
Mã cho các Control SiteMapDataSource và Menu được hiển thị dưới đây. Từ nút gốc tập tin web.sitemap kèm theo thẻ đóng <siteMapNode>, thuộc tính ShowStartingNode = "False" được bổ sung vào SiteMapDataSource để giữ cho nút rỗng khi hiển thị menu. Kiểu trình đơn được áp dụng như menu được mã hóa là một phần của Control Menu.
<asp:SiteMapDataSource id="SiteMap" Runat="Server"
ShowStartingNode="False"/>
<asp:Menu id="NavigationMenu" Runat="Server"
DataSourceID="SiteMap"
StaticDisplayLevels="1"
StaticMenuItemStyle-VerticalPadding="2"
StaticMenuItemStyle-Font-Name="Verdana"
StaticMenuItemStyle-Font-Size="9pt"
StaticMenuItemStyle-ForeColor="#990000"
StaticHoverStyle-BackColor="#707070"
StaticHoverStyle-ForeColor="#FFFFFF"
DynamicMenuStyle-HorizontalPadding="5"
DynamicMenuStyle-VerticalPadding="2"
DynamicMenuStyle-BackColor="#E0E0E0"
DynamicMenuStyle-ForeColor="#990000"
DynamicMenuStyle-BorderWidth="1"
DynamicMenuStyle-BorderColor="#C0C0C0"
DynamicMenuItemStyle-VerticalPadding="2"
DynamicMenuItemStyle-Font-Name="Verdana"
DynamicMenuItemStyle-Font-Size="9pt"
DynamicMenuItemStyle-ForeColor="#990000"
DynamicHoverStyle-BackColor="#707070"
DynamicHoverStyle-ForeColor="#FFFFFF"
/>
Site Map Providers
Có thể chỉ có một tập tinweb.sitemap trong thư mục web gốc. Hạn chế này là hợp lý khi bình thường chỉ có một trình đơn cho một trang web. Tuy nhiên, bạn có thể lưu trữ tập tin XML của bạn dưới một tên tập tin khác nhau hoặc cung cấp bản đồ trang web thay thế cho cùng một trang web. Khi tạo ra các trang web bản đồ với tên tập tin khác nhau, chúng vẫn phải được lưu trữ trong thư mục web gốc.
Giả sử, ví dụ, thay vì sử dụng web.sitemap cho các tập tin trình đơn XML ở trên bạn quyết định lưu nó như Menu.sitemap . Bạn cần tài liệu thay đổi này trong tập tin web.config cũng được lưu trữ trong thư mục gốc web. Nhớ lại rằng tập tin này được sử dụng đồng hành với kịch bản gỡ lỗi và có các thiết lập sau đây.
<!-- Web.Config Configuration File -->
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>
Sự cần thiết phải xác định bản đồ trang web mới cung cấp ngoài tập tin web.sitemap. Sau đây phần <sitemap> được thêm vào phần <system.web> của tập tin web.config.
<!-- Web.Config Configuration File -->
<configuration>
<system.web>
<customErrors mode="Off"/>
<siteMap enabled="true">
<providers>
<add name="MenuProvider"
type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.3600.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
siteMapFile="Menu.sitemap"/>
</providers>
</siteMap>
</system.web>
</configuration>
Tên được gán cho provider ( trong ví dụ này "MenuProvider" ), và tên của tập tin bản đồ trang web được đưa ra trong thuộc tính siteMapFile ( trong ví dụ này "Menu.sitemap"). Các loại thuộc tính được mã hoá.
Khi sự thay đổi này được thực hiện cho tập tin web.config, Control SiteMapDataSource cung cấp service xác định thông qua thuộc tính SiteMapProvider. Sự thay đổi mã hóa trang web ví dụ trên để sử dụng Provider được hiển thị dưới đây.
<asp:SiteMapDataSource id="SiteMap" Runat="Server"
SiteMapProvider="MenuProvider"
ShowStartingNode="False"/>
<asp:Menu id="NavigationMenu" Runat="Server"
DataSourceID="SiteMap"
...
/>
Miễn là chỉ có sitemap cho trang web, nó không cần thiết thay đổi tập tin mặc định web.sitemap. Tuy nhiên, cung cấp bản đồ trang web khác nhau là cần thiết nếu hệ thống menu khác nhau được sử dụng cho các khu vực khác nhau trên trang web của bạn.