1

我从 SQLServer2008 的数据库中创建了动态菜单,该菜单在页面加载时加载,并相应地显示菜单。问题是当我从内容页面单击菜单的任何 MenuItem 时,菜单控件也会再次从数据库加载,我想避免 PostBack 并防止命中数据库以加载菜单。

在 .master

<body>
    <form runat="server">
    <div class="page">
        <div id="navbar" runat="server">
           &nbsp;&nbsp; 
                    <asp:Menu ID="Menu1" Orientation="horizontal" RenderingMode="List" runat="server"
                        DynamicHorizontalOffset="0" OnMenuItemClick="Menu1_MenuItemClick">
                        <StaticMenuItemStyle HorizontalPadding="10px" />
                    </asp:Menu>
            </div>
             <br />
        <div class="main">
            <asp:ContentPlaceHolder ID="MainContent" runat="server">
                   Content here....
            </asp:ContentPlaceHolder>
        </div>
     </div>
    <div class="footer">
    </div>
    </form>
</body>

在 .master.cs 文件中

public partial class SiteMaster : System.Web.UI.MasterPage
{

    static string  conStr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
    int empID = 0;
    int recAffect = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            populateMenuItem();

        }
    }
}

populateMenuItem() 是从名为 MenuMaster 的 SQLServerDB 表绑定菜单的方法。

当我单击任何 MenuItem 时,页面被重定向。这工作正常。只是我想避免在每次加载内容页面后加载菜单! 帮助赞赏!提前致谢!

4

1 回答 1

0

我所做的是一旦应用程序加载,我创建菜单并将其加载到内存中,然后从内存中查询数据。所以我创建了一个类:

public class SiteMap
{
   public string Name { get; set; }
   public string Url { get; set; }
   public List<SiteMap> Items { get; set; }
}

在应用程序启动期间,从数据库中查询并构建 SiteMap 对象的集合,并将其存储在静态引用中,例如:

public static class SiteMapStore
{
   private static List<SiteMap> _entries = null;


  public static List<SiteMap> Entries
  {
    get { return _entries; }
    set
    {
       if (_entries == value) 
         return;
       lock(typeof(SiteMapStore))
       {
            if (_entries != value) 
               _entries = value;
       }
    }
  }
}

使用 SiteMapStore,您可以在构建菜单时始终参考它。将结果存储在对象中并全局存储会快得多。

于 2012-12-06T13:46:53.457 回答