2011-12-18 8 views
1

私はこのような質問がすでにSOに頼まれていることを知っていますが、私もほとんどのものを通過しましたが、誰も私を満足させなかったので、添付されたコードです。実際に私はdatabaleからコードからjqueryギャラリーを構築しています。asp.netでpageload中に2回点火する方法

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



     private void DisplayHotProducts() 
     { 
      var dt = ProductData.GetAllHotProducsts(); 
      if (dt != null && dt.Rows.Count > 0) 
      { 
       StringBuilder sb = new StringBuilder(); 
       sb.AppendLine(" <div id='spotlight_products' class='widget_box center_box'>"); 
       sb.AppendLine("<div class='wintitle'>"); 
       sb.AppendLine(" <div class='inner_wintitle'>"); 
       sb.AppendLine(" Hot Products</div></div>"); 
       sb.AppendLine("<div class='winbody'>"); 
       sb.AppendLine("<div class='mall_focus' id='mall_focus'>"); 
       sb.AppendLine("<a id='bp_carousel_prev'>prev</a>"); 
       sb.AppendLine("<a id='bp_carousel_next'>next</a>"); 
       sb.AppendLine("<div id='bp_carousel'>"); 
       sb.AppendLine(" <div class='carousel_list'>"); 


       for (int i = 0; i < dt.Rows.Count; i=i+5) 
       { 

        sb.AppendLine(" <div class='product_list'>"); 
        sb.AppendLine("<div class='bestproduct_wrapper'> <div class='bestproduct'>"); 
        sb.AppendLine(" <div class='icon_best'></div>"); 
        sb.AppendLine("<ul>"); 
        sb.AppendLine(" <li class='best_Img'><span></span><a href='#' target='_blank'> "); 
        sb.AppendLine(string.Format(" <img src='{0}' width='200' height='200' /></a></li>", dt.Rows[i]["ImagePath"])); 
        sb.AppendLine("</ul>"); 
        sb.AppendLine(" <p class='product_name'>"); 
        sb.AppendLine(string.Format("<a href='Products/{0}' target='_blank'>{1}</a></p>", dt.Rows[i]["Id"], dt.Rows[i]["Name"])); 
        sb.AppendLine("</div></div>"); 

        for (int j = i+1; j <= 4; j++) 
        { 
         sb.AppendLine("<div class='product_item'>"); 
         sb.AppendLine("<ul><li class='product_Img'>"); 
         sb.AppendLine(string.Format("<a href='Products/{0}'><img src='{1}' width='70' height='70'/></a>", dt.Rows[j]["Id"], dt.Rows[j]["ImagePath"])); 
         sb.AppendLine("</li></ul>"); 
         sb.AppendLine(string.Format("<p class='product_name'><a href='Products/{0}'>{1}</a></p>", dt.Rows[j]["Id"], dt.Rows[j]["Name"])); 
         sb.AppendLine("</div>"); 
        } 
       } 

       sb.AppendLine(@" </div></div></div></div></div>"); 
       ltlHotProducts.Text = sb.ToString(); 
      } 
     } 
    } 

の背後に私のコードだけで上記のコードを持っていると、ページの読み込みが二回発射される:コードを参照してください。

また、このiは、背後にあるコードからjQueryのスライドショーを構築して同様の機能を実行する3以上の同様の制御を持ってページ上に配置され、ユーザーコントロールの背後にあるコードです。しかし、上記の2つのユーザコントロールにはimgタグに関するいくつかの問題があります。その一部は画像が欠落しているためです。また、ユーザーがコントロールするページにはマスターページがあります。今私に解決策を提案してください。

だから、階層構造は、このようなものです:私は通常、二回発射するPageLoadのための2つの理由を見てきました

Master Page (master) -> Content Page (aspx) -> Has->3 UserControls (ascx)

+0

どういうのですか? – Steven

+0

aspxページでAutoEventWireupに設定されている値は何ですか? –

+0

デフォルトではtrue –

答えて

5

- あなたはsrc属性を持たないimgタグを持っている場合は、まず、 、IEとChromeの両方がページを再度要求し、イベントが再び発生します。 2つ目は、イベントが2回以上配線されている場合は、複数回発生します。通常、私はこのコードがイベントワイヤーコード(例:this.PageLoad += ... PageLoad)を含んでおり、ページ指示文AutoEventWireup=Trueがaspxファイルに含まれているときにこれが起こるのを見ました。

+0

解決策は何ですか? –

+0

私の更新された質問を参照 –

+0

問題がsrc属性なしのimgタグである場合、それらのimgタグを削除します(または、例えば「missing image」イメージを追加するなどして有効なsrc属性を取得してください)。問題が2回イベントを配線している場合は、そのうちの1つを削除してください(例えば、 'this.PageLoad + = = ..'行のコードを削除するか、' AutoEventWireup'をfalseに変更してください)。 –

関連する問題