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 错误(预期对象)

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 回答