4


0

ページで複数回使用されるJavaScriptを使用したASP.NET Webユーザーコントロール-JavaScript関数が正しいコントロールを指すようにする方法

タイトルの質問を要約したと思います。 以下に、さらに詳しく説明します…​

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

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

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

この問題を解決するには何をする必要がありますか? 私は一日中これを見つめていて、迷っています。

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

ジェイソン

3 Answer


4


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

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


1


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

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

分離コードでは、 `ClientValidationFunction`を想定しました

CustomValidator1.ClientValidationFunction = "Validate_SAPDepartment" + this.ControlId

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


0


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

それ以外の場合は、完全に独立したjqueryファイルも機能します。