powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ошибка в SiteMapDataSource1
5 сообщений из 5, страница 1 из 1
Ошибка в SiteMapDataSource1
    #37916767
xDMK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Найдено несколько узлов с одинаковым ключом ''. XmlSiteMapProvider требует, чтобы узлы карты веб-узла имели уникальные ключи.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Configuration;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Common;
using System.Data.Entity;
using System.Data.SqlClient.SqlGen;

namespace CMS.BLL
{
    public class SqlSiteMapProvider : StaticSiteMapProvider
    {
        private string connectionString;
        private string providerName;
        private string storedProcedure;
        private bool initialized = false;
        public override void Initialize(string name, System.Collections.Specialized.NameValueCollection attributes)
        {
            if (!IsInitialized)
            {
                base.Initialize(name, attributes);
                providerName = attributes["providerName"];
                connectionString = attributes["connectionString"];
                storedProcedure = attributes["storedProcedure"];
                if (string.IsNullOrEmpty(providerName))
                {
                    throw new ArgumentException("The provider name was not found");
                }
                else if (string.IsNullOrEmpty(connectionString))
                {
                    throw new ArgumentException("The provider name was not found");
                }
                else if (string.IsNullOrEmpty(storedProcedure))
                {
                    throw new ArgumentException("The provider name was not found");
                }
                initialized = true;
            }
        }
        public virtual bool IsInitialized
        {
            get { return initialized; }
        }
        private SiteMapNode rootNode;
        public override SiteMapNode BuildSiteMap()
        {
          
               
                    Clear();
                    DbProviderFactory provider = DbProviderFactories.GetFactory(providerName);
                    DbConnection con = provider.CreateConnection();

                    con.ConnectionString = connectionString;

                    DbCommand cmd = provider.CreateCommand();
                    cmd.CommandText = storedProcedure;
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.Connection = con;

                    DbDataAdapter adapter = provider.CreateDataAdapter();
                    adapter.SelectCommand = cmd;

                    System.Data.DataSet ds = new System.Data.DataSet();
                    adapter.Fill(ds, "Products");
                    DataTable dtSiteMap = ds.Tables["Products"];
                    DataRow rowRoot = dtSiteMap.Select("ParentLocationId IS NULL")[0];
                  
                    rootNode = new SiteMapNode(this,
                        rowRoot["Url"].ToString(),
                        rowRoot["Url"].ToString(),
                        rowRoot["Name"].ToString(),
                        rowRoot["Descr"].ToString());
                    
                    string RootID = rowRoot["Id"].ToString();
                    AddNode(rootNode);
                    AddChildren(rootNode, RootID, dtSiteMap);
                  
                
            
            return rootNode;
        }
        private void AddChildren(SiteMapNode rootNode, string RootID, DataTable dtSiteMap)
        {
            DataRow[] childRows = dtSiteMap.Select("ParentLocationId = " + RootID);
            foreach (DataRow row in childRows)
            {
                SiteMapNode childNode = new SiteMapNode(this,
                       row["Url"].ToString(),
                        row["Url"].ToString(),
                        row["Name"].ToString(),
                        row["Descr"].ToString());
                string rowID = row["Id"].ToString();
                AddNode(childNode, rootNode);
                AddChildren(childNode, rowID, dtSiteMap);
            }
        }
        protected override SiteMapNode GetRootNodeCore()
        {
            return BuildSiteMap();
        }
        public override SiteMapNode RootNode
        {
            get
            {
                return BuildSiteMap();
            }
        }
        protected override void Clear()
        {
            lock (this)
            {
                rootNode = null;
                base.Clear();
            }
        }
    }
}


соединение с базой данных
Код: plaintext
1.
2.
3.
4.
5.
6.
   <siteMap defaultProvider="SqlSiteMapProvider">
     <providers>
       <add name="SqlSiteMapProvider" type="CMS.BLL.SqlSiteMapProvider" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Bitrix.mdf;Integrated Security=True;User Instance=True" storedProcedure="GetSiteMap"/>
     </providers>
   </siteMap>
  </system.web>


Дизайн
Код: plaintext
1.
2.
    <asp:TreeView ID="TreeNav" runat="server" DataSourceID="SiteMapDataSource1"></asp:TreeView>
    <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" StartFromCurrentNode="false" ShowStartingNode="false"/>
...
Рейтинг: 0 / 0
Ошибка в SiteMapDataSource1
    #37916824
xDMK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xDMK,


Вопрос немного решился, но ещё остаётся многое загадкой
...
Рейтинг: 0 / 0
Ошибка в SiteMapDataSource1
    #37916929
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xDMK,

Может тебе проще будет создать XML файл и там хранить данные для SiteMapDataSource1 чем играться с базой?
...
Рейтинг: 0 / 0
Ошибка в SiteMapDataSource1
    #37916936
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xDMK,

Если надумаешь привязывать SiteMapDataSource1 не к базе то глянь вот этот сайт

http://asp-net-example.blogspot.com/2009/04/how-to-data-bind-treeview-with.html
...
Рейтинг: 0 / 0
Ошибка в SiteMapDataSource1
    #37916964
xDMK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VIT2708,

Как мне подвязать Id или class к ul если я использую asp:menu?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ошибка в SiteMapDataSource1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]