4

タイトルの質問を要約したと思います。ここにいくつかのさらなる詳細があります...

複数の場所で、場合によっては特定のページで複数回使用される Web ユーザー コントロールがあります。

Web ユーザー コントロールには、*.js ファイル内に含まれ、ページ ヘッダーに自動的に挿入される特定の JavaScript 関数のセット (主に jQuery コード) があります。

ただし、ページでコントロールを複数回使用したい場合、 *.js ファイルが「n」回含まれているため、ブラウザは、どのコントロールがどの機能を実行することを意図しているかについて混乱します。 .

この問題を解決するにはどうすればよいですか? 私は一日中これを見つめていて、途方に暮れています。

すべてのコメントは大歓迎です。

ジェイソン

4

3 に答える 3

4

同じファイルが複数回埋め込まれて競合が発生しているという単純な問題の場合は、RegisterClientScriptInclude. RegisterClientScriptInclude へのすべての呼び出しに同じ識別子を使用すると、そのファイルのインスタンスが 1 つだけ埋め込まれます。

http://msdn.microsoft.com/en-us/library/2552td66.aspx

ただし、メソッドが呼び出されているが、ページ上の操作対象のコントロールがわからないという問題がある場合は、JS に何らかのコンテキストを提供する方法を理解する必要があります。コントロールを表す JavaScript オブジェクトをクライアント側で定義し、サーバー側で、操作対象のコントロールのクライアント ID を使用してオブジェクトをインスタンス化する呼び出しを発行します。

于 2010-04-12T21:21:27.590 に答える
1

CustomValidatorユーザーコントロールの検証に使用しています。コントロールの 2 つのインスタンスを同じページにドロップするまで、コントロールは正常に機能します。これらはまったく同じ JavaScript 関数を参照するため、1 つのコントロールのみが機能します。回避策として、JavaScript 関数名にコントロール ID を追加しました。

Validate_SAPDepartment<% =ControlId %>(oSrc, args) {...}

コードビハインドでは、次のように割り当てましたClientValidationFunction

CustomValidator1.ClientValidationFunction = "Validate_SAPDepartment" + this.ControlId

これは正しいアプローチではないかもしれませんが、うまくいきます。

于 2012-02-01T09:42:05.347 に答える
0

私は以前にこの状況にあったことがあります。ScriptManager を使用して、別の JavaScript ファイルをページに登録します。必要に応じて、これを dll に埋め込まれたリソース ファイルとしてストリーミングできます。次に、コントロールから関数を呼び出すだけです。

それ以外の場合は、完全に別の jquery ファイルでも機能する可能性があります。

于 2010-04-12T21:16:23.453 に答える