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 に答える