如何在Master Page中只加载一次菜单?

时间:2011-01-31 07:53:08

标签: c# .net asp.net visual-studio-2008

我创建了Master页面,该页面的主页上有mainNavigator面板,它是一个Web用户控件(BuildMenu.ascx)。我在主页的加载中填写UC菜单:


<%@ 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 个答案:

答案 0 :(得分:3)

除非您想使用框架(并且您可能没有),否则每次都必须重新加载控件,以便可以渲染它。您可以做的最好是使用服务器端输出缓存,以便加载控件所需的处理时间更短。

要进行输出缓存,请将其放在页面中:

<%@ OutputCache Duration="[Number of Seconds]" VaryByParam="None" %>

答案 1 :(得分:1)

每次发生回发时都会调用加载方法 WILL (AJAX页面除外,但不要去那里)。看看ASP.NET page lifecycle

如果IsPostBack的值为真,你可以做的只是从控件Load事件返回。

但是,如果有问题的控件在内容中是静态的(或几乎是静态的),您可以尝试在服务器上使用output cashing,这样控件将偶尔加载一次,其余时间,服务器只会使用它的兑现副本。

答案 2 :(得分:0)

我有一个更好的主意,为什么你不起诉它会帮助你

像这样::

protected void Page_Load(object sender,EventArgs e)         {

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

这肯定会有用