如何将JQuery嵌入到自定义服务器控件中

The*_*eek 5 .net jquery custom-server-controls

我正在编写一个服务器控件,它是一个带有建议的搜索框(当用户开始输入时,将显示匹配的单词供他们选择).我正在使用jquery和C#.

当我在我正在测试的页面上包含jquery Lib时,控件工作正常.但是,当我尝试将lib嵌入DLL时,它将无法工作.

我试过完全嵌入它并注册脚本:

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

我也尝试在包含jquery的页面标题中添加一个标记:

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

尝试从控件获取信息时,这两种方式都会导致javascript错误(Object Expected)

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

有人曾经这样做过吗?可能吗?有人可以对此有所了解吗?

PS:程序集已在AssemblyInfo.cs文件中注册.

djd*_*d87 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");
}
Run Code Online (Sandbox Code Playgroud)

完成后,这是实施:

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

和AssemblyInfo文件:

[assembly: System.Web.UI.WebResource("MyProject.Resources.jquery.js", "text/javascript")]
Run Code Online (Sandbox Code Playgroud)

  • 这正是我最初所做的,它仍然没有用.然后在我继续思考它时点击了一些东西.我查看了脚本文件构建操作和猜猜什么?没错,我忘记将这个设置为嵌入式资源(您认为在注册程序集时会执行此操作).无论如何,它现在就像一个魅力.谢谢你的帮助! (2认同)