我已经从SQLServer2008的数据库创建了动态菜单,它在页面加载时加载,因此显示菜单。问题是,当我从内容页面单击菜单的任何MenuItem时,菜单控件也会再次从DataBase加载,我想避免使用PostBack,并阻止Hit to DataBase加载菜单。
在.master
<body>
<form runat="server">
<div class="page">
<div id="navbar" runat="server">
<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时,页面被重定向。这很好用。 我想在每次加载内容页面后避免加载菜单! 帮助感谢! 在此先感谢!
答案 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,您可以在构建菜单时始终参考。将结果存储在对象中并在全局范围内更快。