都知道有站点地图文件和XML文件的支持,不知首如何读取地图文件和XML文件,并修改,从而改变menu,请高手指点,最好有代码,非常感谢.
解决方案 »
- DSN_NorthWind是怎么来的
- asp.net 读取栏目及子栏目所有文章并排序问题
- 如何在本地页面实现查询其他网站的信息
- 请问:PHP里的gzinflate函数(用于解压缩字符串),在C#里该怎么实现?
- __________关于将一个DataSet中的内容全部插入一个与它结构完全相同的表中,谢谢各位前辈
- 操作数据库Web程序向导,为了开发节省时间而开发的个人使用小工具。
- datagrid中textbox的父子页面传值问题
- ASP.NET调用参数问题!请高手帮忙 急!~!~
- 传变量错在哪里
- asp.net如何引用asp中的session值。
- ajax 请求过来的页面用innerhtml插入div一片空白,用innertext插入能看到源代码 怎么回事?
- 想制作一个在线代理怎么办
1。为了将站点地图信息存储在 ASP.NET 默认站点地图提供程序不支持的数据源中。例如,您可能希望将站点地图数据存储在 Visual FoxPro 数据库、Oracle 数据库或其他数据源中。
2。为了使用与 Web.sitemap 文件所使用的架构不同的架构来管理导航信息。例如,您可能拥有一个用于存储站点地图数据的现有实现。
3。为了使用动态站点地图结构。例如,您可能希望每个客户端帐户能够查看不同的站点地图。演示一个完整的基于 Access 的站点地图提供程序:
namespace Samples.AspNet.CS.Controls { using System;
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Data.OleDb;
using System.Security.Permissions;
using System.Web; /// An extremely simple AccessSiteMapProvider that only supports a
/// site map node hierarchy 1 level deep.
[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
public class AccessSiteMapProvider : StaticSiteMapProvider
{
private SiteMapNode rootNode = null;
private OleDbConnection accessConnection = null; // This string is case sensitive.
private string AccessConnectionStringName = "accessSiteMapConnectionString"; // Implement a default constructor.
public AccessSiteMapProvider () { } // Some basic state to help track the initialization state of the provider.
private bool initialized = false;
public virtual bool IsInitialized {
get {
return initialized;
}
}
// Return the root node of the current site map.
public override SiteMapNode RootNode {
get {
SiteMapNode temp = null;
temp = BuildSiteMap();
return temp;
}
}
protected override SiteMapNode GetRootNodeCore() {
return RootNode;
}
// Initialize is used to initialize the properties and any state that the
// AccessProvider holds, but is not used to build the site map.
// The site map is built when the BuildSiteMap method is called.
public override void Initialize(string name, NameValueCollection attributes) {
if (IsInitialized)
return; base.Initialize(name, attributes); // Create and test the connection to the Microsoft Access database. // Retrieve the Value of the Access connection string from the
// attributes NameValueCollection.
string connectionString = attributes[AccessConnectionStringName]; if (null == connectionString || connectionString.Length == 0)
throw new Exception ("The connection string was not found.");
else
accessConnection = new OleDbConnection(connectionString); initialized = true;
} ///
/// SiteMapProvider and StaticSiteMapProvider methods that this derived class must override.
///
// Clean up any collections or other state that an instance of this may hold.
protected override void Clear() {
lock (this) {
rootNode = null;
base.Clear();
}
} // Build an in-memory representation from persistent
// storage, and return the root node of the site map.
public override SiteMapNode BuildSiteMap() { // Since the SiteMap class is static, make sure that it is
// not modified while the site map is built.
lock(this) { // If there is no initialization, this method is being
// called out of order.
if (! IsInitialized) {
throw new Exception("BuildSiteMap called incorrectly.");
} // If there is no root node, then there is no site map.
if (null == rootNode) {
// Start with a clean slate
Clear(); // Select the root node of the site map from Microsoft Access.
int rootNodeId = -1; if (accessConnection.State == ConnectionState.Closed)
accessConnection.Open();
OleDbCommand rootNodeCommand =
new OleDbCommand("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid IS NULL",
accessConnection);
OleDbDataReader rootNodeReader = rootNodeCommand.ExecuteReader(); if(rootNodeReader.HasRows) {
rootNodeReader.Read();
rootNodeId = rootNodeReader.GetInt32(0);
// Create a SiteMapNode that references the current StaticSiteMapProvider.
rootNode = new SiteMapNode(this,
rootNodeId.ToString(),
rootNodeReader.GetString(1),
rootNodeReader.GetString(2)); }
else return null; rootNodeReader.Close();
// Select the child nodes of the root node.
OleDbCommand childNodesCommand =
new OleDbCommand("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid = ?",
accessConnection);
OleDbParameter rootParam = new OleDbParameter("parentid", OleDbType.Integer);
rootParam.Value = rootNodeId;
childNodesCommand.Parameters.Add(rootParam); OleDbDataReader childNodesReader = childNodesCommand.ExecuteReader(); if (childNodesReader.HasRows) { SiteMapNode childNode = null;
while(childNodesReader.Read()) {
childNode = new SiteMapNode(this,
childNodesReader.GetInt32(0).ToString(),
childNodesReader.GetString(1),
childNodesReader.GetString(2)); // Use the SiteMapNode AddNode method to add
// the SiteMapNode to the ChildNodes collection.
AddNode(childNode, rootNode);
}
} childNodesReader.Close();
accessConnection.Close();
}
return rootNode;
}
}
}
}
<siteMap defaultProvider="XmlSiteMapProvider">
<providers>
<add
name="Company1SiteMap"
type="System.Web.XmlSiteMapProvider"
siteMapFile="~/Company1/Company1.sitemap" />
<add
name="Company2SiteMap"
type="System.Web.XmlSiteMapProvider"
siteMapFile="~/Company2/Company2.sitemap" />
</providers>
</siteMap>
</system.web>然后,将SiteMapDataSource的SiteMapProvider属性设置为 Company1SiteMap 或 Company2SiteMap就可以使用了。
=================================================================Menu控件可以绑定XmlDataSource,XmlDataSource用起来也是比较简单的,xml和xsl结合在一起,就成为数据源,只需要选择正确的文件路径就行了~~~