¿De dónde saca ASP.NET? -- asp.net campo con javascript campo con rendering camp Relacionados El problema

Where does ASP.Net get its rendered IDs from?


2
vote

problema

Español

He heredado un proyecto con algún javascript desagradable que depende de las ID de objetos codificadas duras.
es decir, hay muchos lugares donde hace cosas como esta

  <td>111  

Cuando la página hace que la página se haga en mi entorno de UAT, el HTML se ve así, y todo funciona bien.

  <td>2  

Sin embargo, cuando lo puse en mi entorno de producción, el HTML se esta pasando de repente así:

  <td>3  

La diferencia en las ID significa que el JavaScript no puede encontrar el elemento, y falla.

En un mundo ideal, me gustaría arrancar el buggy javascript y volvería a hacerlo correctamente, pero para una solución rápida, me gustaría saber qué está causando la diferencia en la interpretación entre los dos entornos.

¿Alguien tiene alguna idea?

gracias, Neil

Original en ingles

I've inherited a project with some nasty JavaScript that depends on hard coded object ids.
i.e. There are lots of places where it does things like this

var magazine = document.getElementById('repModuleDisplay__ctl3_chkCats_0'); 

When the page renders in my UAT environment, the HTML looks like this, and everything works OK.

<input id="repModuleDisplay__ctl3_chkCats_0"      type="checkbox" name="repModuleDisplay:_ctl3:chkCats:0"       ... etc 

However, when I put it on my Production environment, the HTML is suddenly rending like this:

<input id="repModuleDisplay_ctl03_chkCats_0"      type="checkbox" name="repModuleDisplay$ctl03$chkCats$0"      ... etc 

The difference in ids means that the JavaScript can't find the Element, and fails.

In an ideal world, I'd scrap the buggy JavaScript and do it again properly, but for a quick fix, I'd like to know what is causing the difference in rendering between the two environments.

Does anyone have any ideas?

Thanks, Neil

        

Lista de respuestas

7
 
vote
vote
La mejor respuesta
 

La solución más rápida y sencilla que puedo pensar, y probablemente no sea particularmente rápida o fácil si el código está en todo el lugar, es usar la propiedad real <table> <thead> <tr> <th>header1</th> <th>header2</th> </tr> </thead> <tbody> <tr> <td>elem1</td> <td>elem2</td> </tr> <tr> <td>elem3</td> <td>elem4</td> </tr> </tbody> </table>620 del control en su lugar de tratar de adivinar cuál podría ser la identificación generada:

  thead1  
 

The quickest and easiest fix I can think of -- and it's probably not particularly quick or easy if the code is all over the place -- is to use the actual ClientID property of the control instead of trying to guess what the generated id might be:

// i've assumed that the control is named chkCats var magazine = document.getElementById('<%= chkCats.ClientID %>'); 
 
 
   
   
4
 
vote

Debe usar ClientID para el control ASP.NET.

  thead2  
 

You must use clientID for asp.net control.

'<%=mycontrol.ClientID %>' 
 
 
2
 
vote

Use .NET4 y configure la propiedad CLIENTIDMODE en sus controles que desea usar con JS.

por ejemplo;

  thead3  
 

Use .NET4 and set the ClientIDMode property on your controls that you want to use with js.

EG;

  <asp:TextBox ID="txtComment" runat="server" CssClass="myClass"     ClientIDMode="Static" MaxLength="1024"></asp:TextBox> 
 
 
       
       
1
 
vote

Este enlace le brinda una breve descripción de cómo ASP.NET crea las ID, y todos los otros carteles han recomendado la solución correcta de usar el ClientID del control.

Si desea evitar las etiquetas de estilo ASP, entonces otra opción es emitir algunos JS a su página durante el Prerender:

  thead4  

y luego en su código JavaScript, simplemente se refiere a él con el nombre myTextBox . Esta opción puede no adaptarse a usted, depende de su código y con qué frecuencia está utilizando las etiquetas ASP para hacer referencia a la misma ID de control.

 

This link gives you a brief description of how ASP.NET creates the ids, and all the other posters have recommended the right solution of using the control's ClientID.

If you want to steer clear of the ASP style tags, then another option is to emit some js to your page during the PreRender:

StringBuilder sb = new StringBuilder(); sb.AppendLine(string.Format("var myTextBox = document.getElementById('{0}');", MyTextBox.ClientID)); if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "myElementDefinitions"))     Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myElementDefinitions", sb.ToString()); 

and then in your javascript code you just refer to it with the name myTextBox. This option may not suit you, depends upon your code and how often you are using ASP tags to reference the same control id.

 
 

Relacionados problema

0  ¿Imagen de representación en la pantalla de manera eficiente con soporte multiplataforma?  ( Rendering image on the screen efficiently with multi platform support ) 
Estoy haciendo algún tipo de programa de visor / editor de imágenes, que funcionaría en todas las 3 plataformas principales. Sé que no puedo usar OpenGL, po...

37  Firefox 1 Pixel Bug with fronteras-colapso, solución  ( Firefox 1 pixel bug with border collapse workaround ) 
¿Hay alguna solución para el siguiente error "1 Pixel a la izquierda"? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or...

32  ¿Qué opciones están disponibles para el diseño de gráficos dirigidos o no dirigidos en .NET?  ( What options are available for the layout of directed or undirected graphs in n ) 
por gráfico Aquí me refiero a algo que se asemeja a estas imágenes: La solución ideal sería: use solo el código administrado Permitir la producc...

0  Bad SpriteBatch Rendimiento al representar tilemap [libgdx]  ( Bad spritebatch performance when rendering tilemap libgdx ) 
Así que estoy rindiendo un tilemap (simplemente una matriz de twodimensional con Maptiles), llamado mundialmente, utilizando una clase de renderizado isométri...

0  Triangular un triángulo en una cuadrícula [cerrada]  ( Triangulating a triangle into a grid ) 
cerrado . Esta pregunta debe ser más enfocado . Actualmente no está aceptando respuestas. ...

5  InfoPAPH 2007 - Formularios por correo electrónico no se renderizan correctamente  ( Infopath 2007 emailed forms not rendering correctly ) 
Entonces, tengo un formulario que utiliza servicios de InfoPath a través de SharePoint, y después de múltiples intentos al intentar solucionar un problema de ...

0  Problema de representación de la fuente CSS en Firefox  ( Css font rendering issue on firefox ) 
He generado esta fuente personalizada con Icomoon. El problema es: cuando lo uso en Firefox (27.0.1), lo reduce a la mitad, como puede ver aquí: http://i.img...

8  ¿Hay alguna forma gratuita de convertir una página HTML en una imagen con .NET  ( Are there any free ways to turn an html page into an image with net ) 
Quiero tomar HTML, incluido el texto e imágenes y convertirlo en una imagen que contiene todo. ¿Hay alguna forma libre de hacerlo? Esto está usando .NET 3.5...

1  Rutinas de gráficos de fuente  ( Font graphics routines ) 
¿Cómo haces tus propias fuentes? No quiero un algoritmo de peso pesado (Freetype, TrueType, Adobe, etc.) y estaría bien con fuentes de mapa de bits pre-render...

0  Cómo extraer ROI utilizando el búfer de la plantilla  ( How to extract roi using stencil buffer ) 
Lo que quiero hacer es que extraer donde el avatar principal está utilizando el búfer de la plantilla. Estoy usando planeshift , que es OpenSource of 3D MMOR...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos