Pregunta

Estoy usando el kit de herramientas ASP net Ajax y tengo un GridView dentro del UpdatePanel , todo funciona bien.

Cuando intento ejecutar algunos JQuery en la tabla que debería generarse, no hay ningún signo de GridView (o tabla HTML ) en el DOM que se devuelve. Supongo que todo esto se realiza mediante un Javascript generado por ASP

¿Cómo puedo realizar cualquier acción en un GridView que se encuentra dentro de un UpdatePanel ?

¿Fue útil?

Solución

ASP.NET modificará los nombres de los controles bajo ciertas condiciones. Es posible que desee consultar la fuente generada para asegurarse de que hace referencia al control con el nombre que le asignó ASP.NET cuando se genera. Probablemente no sea el nombre que le pusiste en el marcado.

Otros consejos

Si puede generar su javascript en el código, en la carga de página por insistencia, puede inyectar su GridView1.ClientID, etc. en su javascript. (Yo uso un TextBox aquí, por ejemplo, pero sigue el mismo concepto.)

protected void Page_Load(object sender, EventArgs e)
{
    string js = "$(document).ready(function(){$(\"#" + this.TextBox1.ClientID + "\").text('hello world');});";
    HtmlGenericControl script = new HtmlGenericControl("script");
    script.Attributes.Add("type", "text/javascript");
    script.InnerHtml = js;
    Page.ClientScript.RegisterStartupScript(this.GetType(), "key", js, true);
}

Hay tres soluciones para esto en las que puedo pensar. El primero, inyectar javascript desde el servidor con ClientID como sugiere Dave, funciona pero se desordena muy rápido. Hice esto por un tiempo, pero ese tipo de acoplamiento estrecho entre el servidor y el cliente causa problemas.

El segundo es proporcionar otra forma de identificar las entidades, como una clase css. Esto es mejor que la primera opción, pero te deja con una gran cantidad de definiciones de clase extrañas que debes mantener en orden.

La solución que prefiero es usar un marco javascript como jQuery que tenga un motor de selección. De esa manera, puede sortear la basura de UniqueID a través de una selección inteligente y un recorrido de DOM.

Digamos que tienes un control llamado myControl. ASP.Net generará un gran espacio de nombres antes de eso, por lo que no se producen colisiones de ID cuando se procesa. Pero puede seleccionar cada myControl haciendo $ ('[id $ = myControl]') que selecciona cada objeto con un id que termina con myControl. Probablemente hay formas análogas de hacer esto en otros marcos, pero no estoy lo suficientemente familiar como para dar un ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top