2008-11-04 15 views
10

Quiero usar jQuery con asp.net webfoms. ¿Debo obtener un kit de herramientas especial para que los controles .net escuchen ID de control amigables?Webforms y jQuery, ¿cómo hacer coincidir los ID?

Motivo de ser, no quiero escribir javascript haciendo referencia a mi ID html como control_123_asdfcontrol_234.

¿Se ha tratado esto en la versión 3.5? (Recuerdo haber leído que tienes que conseguir un dll especial que hace que ID sea amigable).

+1

Supongo que te refieres a formularios web, no a winforms? – splattne

+0

sí webforms, mybad. – Blankman

Respuesta

10

Puede usar myControlId = "<%= myControl.ClientID %>"; para generar la id. (No amigable) utilizada para hacer referencia a ella en Javascript.

+0

eso es si el javascript está en línea en mi página .aspx, pero el mío será un archivo .js separado que no será analizado. – Blankman

+0

¿qué hay de var controlId = "<% = myControl.ClientID%>" then? –

3

Hay muchas maneras de seleccionar elementos con jQuery. Podría hacer una selección cuidadosa de Tag/ClassName para uno.
No sé de ninguna manera para perder el tiempo con los identificadores hasta ASP.NET 4.0. Por supuesto, siempre puedes probar el ASP.NET MVC Framework.

1

Aunque no he oído hablar de ese nuevo "DLL especial" que hablar de una manera sencilla sería utilizar

var myControlId; 

En su js-archivo separado y luego asignar el ID de cliente a que en var el aspx/ascx.

Yo también odio la identificación del servidor: s ... ASP.NET MVC es la solución a todas las cosas que me molestan con webforms asp.net (Viewstate ... etc etc.).

0

Puede adjuntar un atributo único a sus controles (no estoy seguro si puede hacerlo sin extender los controles web básicos, una búsqueda rápida revealed only this) y luego usar el selector "element [attribute: value]".

0

También puede anular las propiedades UniqueName y/o ClientID de los controles en una clase extendida y devolver la identificación real.

MyTextBox : Web.UI.TextBox 
{ 
    // This modifies the generated 'name' attribute 
    override UniqueID { get { return ID; } } 

    // This modifies the generated 'id' attribute 
    override ClientID { get{ return ID; } } 
} 
14

La manera más fácil que he encontrado es simplemente coincidir en el extremo de la identificación destrozada para la mayoría de los controles. Las excepciones que se conocen son listas de botones de radio y listas de casillas de verificación: tiene que ser un poco más complicado con ellos.

Pero si usted tiene esto en su página .aspx:

<asp:TextBox ID="txtExample" runat="server" /> 

Luego, su jQuery puede encontrar fácilmente que el control, incluso si está destrozado por la página maestra de representación, así:

$("[id$=txtExample]") 

El operador $= coincide con el final de la cadena y el cambio de nombre siempre está en la parte frontal. Una vez que hayas hecho esto, se puede obtener el ID destrozado real como esto:

$("[id$=txtExample]").attr("id") 

y luego procesarla y de todos modos le parezca.

EDIT: Esta es una manera fácil, pero puede ser más un golpe de rendimiento que simplemente darle a cada control una clase igual a su ID anterior.

ver este artículo que Jeff publicó un enlace a otro en cuestión de optimización de jQuery:

jQuery: Performance Analysis of Selectors

+1

Si está usando WebForms para empezar, es probable que en realidad no le importe demasiado el rendimiento. – nathanchere

0

Trate $get('myId'). Creo que esta es la forma de seleccionar un elemento en documentos que no sean HTML.

Cuestiones relacionadas