Как загрузить меню только один раз в мастер-страницу? - PullRequest
1 голос
/ 31 января 2011

Я создал мастер-страницу, в верхней части которой есть панель mainNavigator, которая является веб-элементом управления (BuildMenu.ascx). Я заполняю UC Menu при загрузке главной страницы:


<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="IntermMaster.master.cs" Inherits="MyProject.IntermMaster" EnableViewState="true"  %>

<%@ Register src="Utils/BuildMenu.ascx" tagname="BuildMenu" tagprefix="uc1" %>

>
    <asp:ContentPlaceHolder ID="head" runat="server">

    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">

        <uc1:BuildMenu ID="BuildMenu2" runat="server"  />
   </div>
    <div>

        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>

Это загрузка в событии обратной передачи:

BuildMenu.ascx.cs


   protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                 // Fill Menu from DataBase (Compare SiteMap...)
            }

Каждый пост обратно BuildManu.ascx загружается каждый раз, когда мне действительно скучно. Как я могу решить это. Я хочу сделать только один раз загрузить BuildMenu.ascx (на главной странице)

enter image description here

Ответы [ 3 ]

3 голосов
/ 31 января 2011

Если вы не хотите использовать кадры (а вы, вероятно, нет), элемент управления должен каждый раз перезагружаться, чтобы его можно было визуализировать. Лучшее, что вы можете сделать, - это использовать кэширование вывода на стороне сервера, чтобы загрузка элемента управления занимала меньше времени.

Чтобы сделать кэширование вывода, поместите это на своей странице:

<%@ OutputCache Duration="[Number of Seconds]" VaryByParam="None" %>
1 голос
/ 31 января 2011

Метод загрузки БУДЕТ вызываться каждый раз, когда происходит обратная передача (за исключением страниц AJAX, но давайте не будем идти туда).Взгляните на жизненный цикл ASP.NET .

Что вы можете сделать, это просто вернуться из события Load элемента управления, если значение IsPostBack равно true.

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

0 голосов
/ 31 января 2011

У меня есть идея, почему вы не подаете в суд на сессию, это поможет вам

сделать так: *

Защищенный void Page_Load (отправитель объекта, EventArgs e) {

        if session(ispostback") <> "menuloaded"
        {
             // Fill Menu from DataBase (Compare SiteMap...)
             Session("ispostback")="menuloaded" 
        }

это будет работать наверняка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...