站点地图Web.sitemap的数据库读取,是借助TreeView实现
就可以和数据库的TreeView动态通用
当次加载完成TreeView数据库读取显示后,允许一次就可以了
读取数据库后,制动写入文件流的Web.sitemap中,代码如下:
1:先添加 TreeView控件 和 SiteMapPath控件 到页面中:
<asp:TreeView ID="TreeView2" runat="server">
</asp:TreeView>
<asp:SiteMapPath ID="SiteMapPath2" runat="server">
</asp:SiteMapPath>
后台代码:
添加一个按钮事件来执行(执行一次就可以):
protected void btnXML_Click(object sender, EventArgs e)
{
DataBindsXMLSet(Convert.ToInt32(this.lblUserId.Text));
}
//站点地图字符串设置
public string SetSiteMapNode(string vlaues)
{
return vlaues.Replace("'", @"""").Replace("&", "&");
}
/// <summary>
/// 设置站点地图用
/// </summary>
/// <param name="userId"></param>
public void DataBindsXMLSet(int userId)
{
List<ArticlesType> artList = new ArticlesTypesManager().ArticlesTypeDateList();
string path = Server.MapPath("~/Web.sitemap"); //文件路径
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);//创建流,覆盖
using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8)) //写入
{
sw.Write(SetSiteMapNode("<?xml version='1.0' encoding='utf-8' ?>\t\n"));
sw.Write(SetSiteMapNode("<siteMap xmlns='http://schemas.microsoft.com/AspNet/SiteMap-File-1.0' >\t\n"));
sw.Write(SetSiteMapNode("<siteMapNode>\t\n"));
foreach (ArticlesType item in artList)
{
TreeNode node = new TreeNode();
node.Text = item.TypeName;
node.Value = item.TypeId.ToString();
node.NavigateUrl = "AdminSelectList.aspx?UserId=" + userId + "&TypeId=" + item.TypeId;
sw.Write(SetSiteMapNode("<siteMapNode url='~/Admin/" + node.NavigateUrl + "' title='" + node.Text + "' description=''>\t\n"));
//node.NavigateUrl=
List<Article> titleList = new ArticlesManager().SelectTitleByTypeId(item.TypeId, userId);
if (titleList.Count <= 0)
{
node.Text += "<span style='font-size:12px;color:'#333''>(无)</span>";
this.TreeView1.Nodes.Add(node);
}
else
{
this.TreeView1.Nodes.Add(node);
for (int i = 0; i < titleList.Count; i++)
{
TreeNode chilnode = new TreeNode();
chilnode.Text = titleList[i].Title.ToString();
chilnode.Value = titleList[i].TypeId.ToString();
chilnode.NavigateUrl = "AdminDetails.aspx?UserId=" + titleList[i].UserId + "&ArticlesId=" + titleList[i].ArticlesId;
sw.WriteLine(SetSiteMapNode("<siteMapNode url='~/Admin/" + chilnode.NavigateUrl + "' title='" + chilnode.Text + "' description='' />\t\n"));
node.ChildNodes.Add(chilnode);
}
}
sw.Write(SetSiteMapNode("</siteMapNode>\t\n"));
}
sw.Write(SetSiteMapNode("</siteMapNode>\t\n"));
sw.Write(SetSiteMapNode("</siteMap>"));
}
}
完成,回到vs中打开Web.sitemap文件,自动写入站点导航
如果数据库更新了,就再按一下执行按钮就搞定了