SREENATH GANGA Ответов: 1

Избегайте postbacking masterpage пользовательского контроля на каждой странице загрузки


Я создаю многопользовательское приложение, где у каждого пользователя есть набор веб-форм для доступа и определенный набор, который не будет использоваться(почти 30 типов профилей)

Я создал две таблицы мастер меню и мастер подменю и добавил URL адреса и отношение родитель потомок

Я использую Infragistic WebExplorer в качестве навигатора в UserControl и я делаю все привязки данных внутри пользовательского элемента управления отделенного кода.

Моя проблема заключается в том, что каждый раз, когда пользователь нажимает на WebExplorer, элемент управления привязывается к базе данных и элемент управления повторно визуализируется. кто-нибудь может подсказать мне, как избежать этой привязки данных при каждом обратном вызове

Что я уже пробовал:

    public partial class MyMenuBar : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {           
                loadexplorerebar();          

        }



        public void getMenuData()
        {
            SqlCommand cmd = new SqlCommand("select * from MainMenuMaster");

            DataTable dt = ReturnQueryResultDatatable(cmd);

            SqlCommand cmd1 = new SqlCommand(@"SELECT        SubMenuMaster.Menu_PK, SubMenuMaster.MenuText, SubMenuMaster.MenuURL, SubMenuMaster.ParentID, SubMenuMaster.isEnable, SubMenuMaster.IsNormal
FROM            SubMenuMaster INNER JOIN
                         UserProfileRights ON SubMenuMaster.Menu_PK = UserProfileRights.Menu_PK
WHERE(UserProfileRights.UserProfile_Pk = @Param2)");
            cmd1.Parameters.AddWithValue("@Param2", int.Parse(Session["UserProfile_Pk"].ToString()));
            DataTable dt2 = ReturnQueryResultDatatable(cmd1);
            Session["MainMenuMaster"] = dt;
            Session["SubMenuMaster"] = dt2;

        }


        public void loadexplorerebar()
        {
            DataTable dt = null;
            DataTable dt2 = null;

            if (Session["MainMenuMaster"]==null || Session["SubMenuMaster"]==null)
            {
                getMenuData();
            }
            else
            {
                dt = (DataTable)Session["MainMenuMaster"];
                dt2 = (DataTable)Session["SubMenuMaster"];

            }            
                     

            if (dt != null)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    ExplorerBarGroup grp = new ExplorerBarGroup();
                    grp.Text = dt.Rows[i]["MainmenuName"].ToString();
                    this.WebExplorerBar1.Groups.Add(grp);
                    int MAINMENU_PK = int.Parse(dt.Rows[i]["mAINmENU_pk"].ToString());
                    try
                    {

                        DataTable mainmenuchild = dt2.Select("parentid=" + MAINMENU_PK + "").CopyToDataTable();

                        foreach (DataRow drow in mainmenuchild.Rows)
                        {

                            int childid = int.Parse(drow["Menu_PK"].ToString());
                            ExplorerBarItem item = new ExplorerBarItem();
                            item.Text = drow["MenuText"].ToString();
                            item.NavigateUrl = drow["MenuURL"].ToString();
                            grp.Items.Add(item);
                            try
                            {
                                getnewItem(item, childid, dt2);
                            }
                            catch (Exception)
                            {


                            }
                        }
                    }
                    catch (Exception)
                    {


                    }


                }


            }

        }



        public void getnewItem(ExplorerBarItem item, int parentid, DataTable mainmenuchild)
        {
            if (parentid == 220)
            {
                int k = 0;
            }
            DataTable mainmenuchildtemp = mainmenuchild.Select("parentid=" + parentid + "").CopyToDataTable();
            foreach (DataRow drow in mainmenuchildtemp.Rows)
            {

                try
                {
                    int childid = int.Parse(drow["Menu_PK"].ToString());
                    ExplorerBarItem itemnum = new ExplorerBarItem();
                    itemnum.Text = drow["MenuText"].ToString();
                    itemnum.NavigateUrl = drow["MenuURL"].ToString();
                    item.Items.Add(itemnum);
                    getnewItem(itemnum, childid, mainmenuchild);
                }
                catch (Exception)
                {
                    ;
                }
            }
        }


И моя HTML разметка выглядит следующим образом

<ig:WebExplorerBar ID="WebExplorerBar1" runat="server" Width="250px">
    </ig:WebExplorerBar>

1 Ответов

Рейтинг:
1

Vincent Maverick Durano

Реальное решение, чтобы избавиться от полной обратной передачи страницы, - это использовать AJAX.

Я бы рекомендовал вам также опубликовать свой вопрос на специализированных форумах по инфрагистике, поскольку вы используете элементы управления инфрагистикой. Таким образом, эксперты на этом форуме могли бы помочь вам в вашем текущем вопросе. Форум разработчиков .net Forum-Форум программирования Infragistics - форум пользовательского интерфейса[^]