2009-12-08 71 views
5

我正在编写一个带有建议的搜索框的服务器控件(当用户开始输入时,会出现匹配的文字供他们选择)。我正在使用jQuery和C#。如何将JQuery嵌入到自定义服务器控件中

当我在测试的页面上包含jQuery Lib时,该控件工作正常。但是,当我尝试将DLL嵌入到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文件中注册。

回答

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"); 
} 

而完成,这里的implentation:

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

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

    } 
} 

而且集信息文件:

[assembly: System.Web.UI.WebResource("MyProject.Resources.jquery.js", "text/javascript")] 
+2

这正是我最初做的,它仍然没有工作。然后点击一下,而我继续思考它。我看了脚本文件构建操作并猜猜是什么?没错,我忘了将其设置为嵌入式资源(您认为在注册程序集时会这样做)。无论如何,它现在就像一个魅力。谢谢你的帮助! – 2009-12-08 20:33:15

+0

我知道我应该提到这一点!卫生署。 – GenericTypeTea 2009-12-08 21:15:55

+0

感谢您提供关于将资源设置为嵌入式的提示。这让我疯狂。 – 2010-09-28 12:44:13

相关问题