0

私は、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:」関数を削除しても、問題は引き続き発生します。ただし、ダイアログ ブロック全体を削除しても発生しないため、このダイアログ呼び出しに固有のものです。

4

2 に答える 2

1

ユーザー コントロールに記述された java-script/jQuery がランディング ページに毎回読み込まれるかどうかを確認します。

また、ランディング ページに同じ JavaScript/jQuery コードの複数のコピーが含まれます。

ユーザーコントロールを複数ロードすると、スクリプトが複数起動されます。

ユーザーコントロールをロードするたびに発生します。

これを克服するには、ランディング ページに jQuery 呼び出しを配置し​​ます。

そして、ロード時に jQuery をユーザー コントロールにバインドします。

編集 1

ユーザー コントロールのインスタンスが 1 つしかないことはわかっています。

私のポイントは

  1. ページでユーザー コントロールを開いています
  2. ユーザーコントロールにはjQuery呼び出しがあります
  3. ダイアログを開く場合、jQuery 呼び出しはランディング ページの一部になります。
  4. ダイアログを閉じます
  5. jQuery はまだランディング ページの一部です
  6. 再びダイアログを開く
  7. ランディング ページにロードされたユーザー コントロールに記述された jQuery の 2 番目のコピー
  8. これで、jQuery コードのコピーが 2 つになりました
  9. そしていつでもあなたは開いたり閉じたりするでしょう

これが問題だと思います。

于 2012-11-18T04:57:27.723 に答える
0

何が起こっているのかを特定することができました。

外部 JavaScript ファイルへのリンクは、ユーザー コントロール自体の中にありました。このリンクをユーザーコントロールからメインページに移動すると、修正されました。

なんらかの理由で、これにより動的スクリプト ブロック ファイルが生成されなくなり、その結果、すべての関数が 2 回呼び出されることもなくなりました。

この JavaScript リンクを、このユーザー コントロールを使用するすべてのページに追加するか、マスター ページに追加することを忘れないでください。

なぜこれが起こるのかを誰かが理解しているなら、私は知りたいです。

于 2012-11-18T07:31:52.297 に答える