2016-08-27 3 views
2

私はいくつかのタイルを表示するWebサイトで作業しています。タイルの高さは、挿入されるイメージとテキストによって異なる場合があります。すべてのタイルが同じ高さを達成することを保証するために、私は頭の中で次のスクリプトを書かれている:Ajaxポストバックでスクリプトが実行されない

function BindEvents() 
{ 
    $(window).load(function() 
    { 
     var maxHeight = Math.max.apply(null, $(".producttile").map(function() { 
      return $(this).height(); 
     }).get()); 

     $('.producttile').height(maxHeight); 

     maxHeight = Math.max.apply(null, $(".clistdiv").map(function() { 
      return $(this).height(); 
     }).get()); 

     $('.clistdiv').height(maxHeight); 
    }); 
} 

上記のスクリプトは、下のようにデータリストにバインドされています。これは結合、今

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <hr width="100%" noshade/> 
     <script type="text/javascript"> 
      Sys.Application.add_load(BindEvents); 
     </script> 
     <asp:DataList 
       ID="DataList1" 
       runat="server" 
       onitemcommand="DataList1_ItemCommand1" 
       class="itemsdatalist" 
       RepeatDirection="Horizontal" 
       RepeatLayout="Flow" 
       onload="DataList1_Load"> 
      <ItemTemplate> 
       ...........rest of the code 

とタイル自動サイズ設定は、ページが最初にロードされたときに正常に機能します。ボタンがajaxコールを起動し、より多くのタイルを取り込み、この更新パネルを再更新します。ここに問題があります。

BindEvents()は再度呼び出されないため、タイルのサイズは異なります。タイルのサイズは変更されていますが、再度調整されることはありません。

私は更新パネルのコンテンツテンプレート内にスクリプトを保存しようとしましたが、それはうまくいっていますが、不思議は全くありませんでした。

助けてください。

+0

$(window)の代わりに$( "#UpdatePanel1")をロードしてください。 – Sterling

+0

こんにちは、クラスとIDでupdatepanelコントロールのソリューションを試してみましたが、 –

+0

ContentTemplateがロードされるたびにこの関数が呼び出されるので、window.loadを完全に削除しようとしますか?あなたのBindEvents関数でconsole.logを実行し、呼び出されているかどうかを確認します。 – Sterling

答えて

0

最後に私はこの問題を解決しました。あなたの助けになる解決策はここにあります。 私はちょうどページロードの次のコードを書いて、それは完璧に働いた。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (((ScriptManager)this.Master.FindControl("ScriptManager1")).IsInAsyncPostBack) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("<script language='javascript' type='text/javascript'>"); 
     sb.Append("Sys.Application.add_load(func);"); 
     sb.Append("function func() {"); 
     sb.Append("Sys.Application.remove_load(func);"); 
     sb.Append("var maxHeight = Math.max.apply(null, $('.producttile').map(function() { return $(this).height(); }).get()); $('.producttile').height(maxHeight);"); 
     sb.Append("maxHeight = Math.max.apply(null, $('.clistdiv').map(function() { return $(this).height(); }).get()); $('.clistdiv').height(maxHeight);"); 
     sb.Append("}"); 
     sb.Append("</script>"); 
     ScriptManager.RegisterStartupScript(this, GetType(), "script", sb.ToString(), false); 
    } 
} 

このソリューションの実装に私を助けて、次の記事をありがとう: The solution link

このアプローチでは、セキュリティ/パフォーマンスの抜け穴がありますか教えてください。

+0

*このアプローチでは、セキュリティ/パフォーマンスの抜け穴はありますか?教えてください。*あなたは新しい質問を作成し、答えではなく別途に質問することができます。 –

関連する問題