9

特定の機能を JQuery に依存する ASP.NET サーバー コントロールがあります。Webリソースとして追加しようとしました。

私の問題は、jqueryファイルを含める方法がそれを本文に追加すること、または正確にはフォームです:

this.Page.ClientScript.RegisterClientScriptInclude(...)

これに代わる方法は、head タグにリテラルとして追加することです。

LiteralControl include = new LiteralControl(jslink);
this.Page.Header.Controls.Add(include);

ただし、これに関する問題は、JQuery が後で読み込まれるため、JQuery を使用する head 内の既存のコード src が失敗することです (ASP.NET はコントロール ツリーの下部にリテラルを追加します)。

JQueryを埋め込みリソースにする実用的な方法はありますが、最初に頭にロードされますか? それとももう諦めるべきか。

4

2 に答える 2

7

jQuery をパッケージ化して独自のサーバー コントロール内に埋め込む場合は、ScriptManager を使用してクライアントに提供する必要があります。私の頭の上から、あなたはしなければなりません:

  1. プロジェクトに jQuery.js を追加します
  2. その「ビルドアクション」プロパティの下で、それを埋め込みリソースにします
  3. コントロールの AssemblyInfo.cs に追加します

    [assembly: WebResource("<Your Server Control namespace>.jQuery.js", "application/x-javascript")]
    
  4. コントロールをSystem.Web.UI.ScriptControlから継承する (または少なくともIScriptControlを実装する)

  5. GetScriptReferences をオーバーライドします。

    protected override IEnumerable<ScriptReference>
    GetScriptReferences()
    {
    return new ScriptReference[] { 
        new ScriptReference("<Your Server Control namespace>.jQuery.js", this.GetType().Assembly.FullName),
    };
    }
    

独自のクライアント スクリプトはすべて、次の内部でセットアップする必要があります。

protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()

これにより、依存関係の正しい順序が保証されます (つまり、独自のクライアント スクリプトで jQuery を使用できるようになります)。

于 2009-01-08T14:37:49.480 に答える
1

アップデート:

これを行うためのはるかに簡単な方法は、スクリプトにスクリプト タグを動的に追加し、Google コード ホスティングをポイントすることです。例えば

function include_dom(script_filename) {
    var html_doc = document.getElementsByTagName('head').item(0);
    var js = document.createElement('script');
    js.setAttribute('language', 'javascript');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', script_filename);
    html_doc.appendChild(js);
    return false;
}

include_dom("http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js");

関数はこの記事から取得されます


Crecentfresh は私を正しい方向に導きました。

http://en.csharp-online.net/Creating_Custom_ASP.NET_AJAX_Client_Controls—IScriptControl.GetScriptReferences_Method .

私の問題はまだ残っています.ScriptManagerは頭のスクリプトの後に参照を追加しますが、これは解決できない問題だと思います. 私は自分自身に答えることにしましたが、クレセントフレッシュにも賛成票を投じました。

于 2009-01-26T00:03:18.337 に答える