我正在编写一个服务器控件,这是一个带有建议的搜索框(当用户开始输入时,会出现匹配单词以供他们选择)。我正在使用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文件中注册。
答案 0 :(得分: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")]