5

提案付きの検索ボックスであるサーバー コントロールを作成しています (ユーザーが入力を開始すると、一致する単語が表示されて選択できるようになります)。jquery と C# を使用しています。

テストしているページにjquery Libを含めると、コントロールは正常に機能します。ただし、lib を DLL に埋め込もうとすると機能しません。

私はそれを完全に埋め込んでスクリプトを登録しようとしました:

ClientScriptManager manager = this.Page.ClientScript;
manager.RegisterClientScriptResource(typeof(Search), jqueryResource); //jqueryResource= SearchControl.javascript.jquery.js 

また、jquery を含むページのヘッダーにタグを追加しようとしています。

string javascriptUrl = manager.GetWebResourceUrl(typeof(Search), jqueryResource); 
LiteralControl jquery = new LiteralControl(string.Format(javascriptInclude, jqueryUrl));
Page.Header.Controls.Add(jquery);

コントロールから情報を取得しようとすると、どちらの方法でも JavaScript エラー (Object Expected) が発生します。

var params = $("#searchBox").val(); //called on keyup when typing in textbox

誰かがこれを以前にやったことがありますか?出来ますか?誰かがこれに光を当てることができますか?

PS: アセンブリは既に AssemblyInfo.cs ファイルに登録されています。

4

1 に答える 1

6

編集:あなたの質問を読み直して、あなたがしたことを繰り返しただけだと気づきました。ただし、これは期待どおりに機能する私の実装です。

を使用する必要がありますRegisterClientScriptResource。コントロールの PreRender イベントで次のスニペット (私の ScriptRegisterHelper 静的クラスから取得) を呼び出すだけです。

/// <summary>
/// Registers the jQuery client script to the page.
/// </summary>
/// <param name="cs">The ClientScriptManager to assign the script to.</param>
internal static void RegisterJQuery(ClientScriptManager cs)
{
    cs.RegisterClientScriptResource(typeof(ScriptRegisterHelper), 
        "MyProject.Resources.jquery.js");
}

そして完成のために、実装は次のとおりです。

protected override void OnPreRender(EventArgs e)
{
    if (!this.DesignMode)
    {

       // Register the JavaScript libraries
       ClientScriptManager cs = this.Page.ClientScript;
       ScriptRegisterHelper.RegisterJQuery(cs);

    }
}

そして、AssemblyInfo ファイル:

[assembly: System.Web.UI.WebResource("MyProject.Resources.jquery.js", "text/javascript")]
于 2009-12-08T20:09:51.657 に答える