2009-12-08 10 views
5

Estoy escribiendo un control de servidor que es un cuadro de búsqueda con sugerencias (cuando el usuario comienza a escribir, las palabras coincidentes aparecerán para que las seleccione). Estoy usando jquery y C#.Cómo incrustar JQuery en el control de servidor personalizado

El control funciona bien cuando incluyo el jquery Lib en la página que estoy probando. Sin embargo, no funcionará cuando intente incrustar la lib en la DLL.

He tratado completamente incrustarlo y registrar la secuencia de comandos:

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

y estoy también trató sólo añadir una etiqueta en la cabecera de la página que incluye el jQuery:

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

Tanto formas de causar errores de Javascript (se espera un objeto) al intentar obtener información de los controles

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

¿Alguien ha hecho esto antes? ¿Es posible? ¿Alguien puede arrojar algo de luz sobre esto?

PD: Los ensamblados ya están registrados en el archivo AssemblyInfo.cs.

Respuesta

6

EDIT: Acabo de volver a leer su pregunta y me di cuenta de que acaba de repetir lo que ha hecho. Sin embargo, esta es mi implementación, que funciona como se esperaba:

Debe usar RegisterClientScriptResource. Sólo tiene que llamar el siguiente fragmento (tomado de mi clase estática ScriptRegisterHelper) en caso PreRender del control:

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

Y para finalizar, aquí está la implementació:

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

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

    } 
} 

y el archivo AssemblyInfo:

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

Esto es exactamente lo que hice inicialmente y todavía no funcionó. Entonces algo hizo clic mientras yo seguía reflexionando sobre eso. Miré la acción de creación del archivo de script y Adivina qué? Así es, me olvidé de configurar este como un recurso incrustado (crees que haría esto cuando registras los ensamblajes). De todos modos, funciona como un encanto ahora. ¡Gracias por tu ayuda! –

+0

¡Sabía que debería haberlo mencionado también! Doh. – GenericTypeTea

+0

Gracias por este recordatorio sobre la configuración del recurso para ser incrustado. Esto me estaba volviendo loco. –

Cuestiones relacionadas