問題は、新しいノードを削除または追加してサイトマップを編集するために使用される、EditableSiteMapProvider というクラスにオーバーライド BuildSiteMap() 関数があることです。base.BuildSiteMap(); を実行すると、「XmlSiteMapProvider が初期化されていません。最初に Initialize() メソッドを呼び出します。
public override SiteMapNode BuildSiteMap()
{
SiteMapNode result = base.BuildSiteMap();
//if (_loadFileNodes())
//{
// lock(objLock)
// {
// base.Clear();
// result = base.BuildSiteMap();
// _dataFixInProgress = false;
// }
//}
if (!_dataFixInProgress)// && !_dataIsFixed)
{
この関数は、次の関数 Refresh() から呼び出されます。
public void Refresh(){
Clear();
this._loadFileNodes();
BuildSiteMap();
}
これら 2 つの関数はクラス EditableSiteMapProvider にあり、この関数を使用して、ファイルをデータベースにアップロードするために使用される files.aspx のような別のページからサイトマップを更新し、ナビゲーション バーにも名前を表示します。そのために、files.aspx.cs のページ読み込み時に更新機能を呼び出してサイトマップを更新します。これにより、アップロードされたすべての新しいファイルが検索され、サイトマップからファイル リンクが追加または削除されます。
protected void Page_Load(object sender, EventArgs e)
{
DevExpress.Web.ASPxSiteMapControl.ASPxSiteMapControl smc = (DevExpress.Web.ASPxSiteMapControl.ASPxSiteMapControl)this.Master.FindControl("ASPxSiteMapControl1");
Proj.Web.EditableXmlSiteMapProvider sitemap = new Proj.Web.EditableXmlSiteMapProvider();
sitemap.Refresh();
}