如何防止在asp.net中的主页面上回传菜单控件?

时间:2012-12-06 11:58:20

标签: asp.net menu master-pages postback

我已经从SQLServer2008的数据库创建了动态菜单,它在页面加载时加载,因此显示菜单。问题是,当我从内容页面单击菜单的任何MenuItem时,菜单控件也会再次从DataBase加载,我想避免使用PostBack,并阻止Hit to DataBase加载菜单。

在.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时,页面被重定向。这很好用。 我想在每次加载内容页面后避免加载菜单! 帮助感谢! 在此先感谢!

1 个答案:

答案 0 :(得分: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,您可以在构建菜单时始终参考。将结果存储在对象中并在全局范围内更快。