私は、HTML と Jquery ロジックの束をいくつかのページで共有するために使用している asp.net ユーザー コントロールを持っています。このユーザー コントロールには、json 呼び出しからロードされたいくつかのドロップダウン ボックスがあり、分離コード ロジックは追加されていません。
このユーザーコントロールを通常のページで使用すると、問題なく動作し、まったく問題ありません。
ただし、ユーザー コントロールを div でラップし、jqueryUI モーダル ダイアログを使用すると、ユーザー コントロール内のすべてが 2 回起動します。最初の $(document).ready(function() {}); のコードだけでなく、すべての関数も呼び出されたときに 2 回起動されます。
これを Visual Studio でデバッグすると、すべてが最初に外部 JS ファイルから呼び出され、次に何らかの形でその場で生成される「スクリプト ブロック」ファイルから再度呼び出されることがわかります。
このスクリプト ブロック ファイルは、モーダルでユーザー コントロールをラップしていないページでは生成されません。
IISExpress または IIS7 を使用する場合も同じことが起こります。
問題は、このスクリプト ブロック ファイルが作成されるのはなぜで、すべての jQuery ロジックが 2 回実行されるのはなぜですか?
- 編集 -
ここにdivがあります:
<div id="divMyDiv" title="MyDiv">
<uc1:MyUserControl runat="server" ID="MyUsercontrol" />
</div>
これを使用するモーダル ロジックは次のとおりです。
$("#divMyDiv").dialog({
autoOpen: false,
height: 400,
width: 400,
modal: true,
open: function (type, data) {
$(this).parent().appendTo("form");
}
});
注: 「open:」関数を削除しても、問題は引き続き発生します。ただし、ダイアログ ブロック全体を削除しても発生しないため、このダイアログ呼び出しに固有のものです。