2

LinkBut​​tonから派生し、小さなjavascript関数をページにレンダリングするasp.netサーバーコントロールを作成しました。

このコントロールをページで何度も使用したいのですが、JavaScriptをページで1回だけレンダリングしたいだけです。一方で、将来的にjsファイルを追加するのを忘れたくないので、手動でjsファイルに追加するのではありません。

これを行うための最良の方法は何でしょうか?

4

3 に答える 3

9

クライアントスクリプトの重複の防止

Page.ClientScript.RegisterClientScriptBlock(..)などの登録メソッドを使用します。いくつかのオーバーロードがありますが、それらはすべて同じように機能します。発行されたコントロールインスタンスの数に関係なく、スクリプトを1回だけレンダリングするのは十分に賢い方法です。

MSDNドキュメントでのMicrosoftのコメント:

クライアントスクリプトは、そのキーとタイプによって一意に識別されます。同じキーとタイプのスクリプトは重複と見なされます。このページに登録できるのは、特定のタイプとキーのペアを持つ1つのスクリプトのみです。すでに登録されているスクリプトを登録しようとしても、スクリプトの複製は作成されません。

MSDNのドキュメントには、次のようなサンプルコードも含まれています。

// Check to see if the client script is already registered.
if (!cs.IsClientScriptBlockRegistered(cstype, csname2))
{
  StringBuilder cstext2 = new StringBuilder();
  cstext2.Append("<script type=text/javascript> function DoClick() {");
  cstext2.Append("Form1.Message.value='Text from client script.'} </");
  cstext2.Append("script>");
  cs.RegisterClientScriptBlock(cstype, csname2, cstext2.ToString(), false);
}

他の同様の登録方法

さまざまな方法を使用して、さまざまな方法でクライアントスクリプトを登録できます。それぞれの詳細については、MSDNの各ClientScriptManager.RegisterClientScript *(..)メソッドを参照してください。これらはすべて、レンダリングされたページでの重複を防ぐために構築されています。

これにより、スクリプトを心配したり、追跡したりカウントしたりすることなく、制御レベルでスクリプトを出力する自由が得られます。

編集:

ClientScriptManagerインスタンスには、Page.ClientScriptプロパティを介してアクセスします。

于 2010-01-26T07:49:07.547 に答える
0

Page.RegisterClientScriptBlockメソッドを使用できます。

これがMSDNの例です。

if (!this.IsClientScriptBlockRegistered("clientScript"))
{
  // Form the script that is to be registered at client side.
  String scriptString = "<script language=\"JavaScript\"> function DoClick() {";
  scriptString += "myForm.show.value='Welcome to Microsoft .NET'}<";
  scriptString += "/";
  scriptString += "script>";
  this.RegisterClientScriptBlock("clientScript", scriptString);
}

HTH

于 2010-01-26T07:53:36.507 に答える
0

CDN上のスクリプトを参照し、それを複数回複製しないようにする方法はありますか?それとも、それはとにかく単なるポインタであり、ブラウザは(?)同じライブラリを2回ロードしないほど賢いので、心配する必要はありませんか?

つまり、サーバーコントロールから次のコードを挿入したいとします。

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

RegisterClientScriptBlockを使用する場合、IsClientScriptBlockRegisteredメソッドを使用して、サーバーコントロールに複数回ロードさせないようにすることができます。ただし、前述のコードは、別の(異なる)サーバーコントロールによって、またはサーバーコントロールの外部でjQueryを使用したい開発者によってページに配置された可能性があります。

開発者がすでにスクリプトをロードしている場合、サーバーコントロールにスクリプトをロードしないようにするにはどうすればよいですか?

于 2011-03-25T23:50:04.413 に答える