2009-05-10 15 views
5

Estoy buscando agregar páginas maestras a un sitio existente, pero he descubierto que una vez que lo hago, los ID de los elementos se anteponen con un código (por ejemplo, ctl00_MainPageContent_).¿Alguna manera de evitar que las páginas maestras cambien los ID de los elementos?

Desafortunadamente, esto rompe las secuencias de comandos existentes en la página que utiliza la ID del elemento original sin modificar.

Me doy cuenta de que puedo reemplazarlo con <%= Element.ClientID %>, pero sería increíble si pudiera desactivar este comportamiento por completo.

Entonces, ¿puedo conservar las ID originales?

Respuesta

5

La pregunta ya fue contestada en el post anterior: Remove MasterPage Generated ID

La solución anula el evento render con el siguiente código:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 
    Dim Html As New StringWriter() 
    Dim Render As New HtmlTextWriter(Html) 
    MyBase.Render(Render) 
    writer.Write(Html.ToString().Replace("name=""ctl00$ContentBody$", _ 
        "name=""").Replace("id=""ctl00_ContentBody_", "id=""")) 
End Sub 
+0

Un enfoque interesante. ¿Hay alguna consideración de rendimiento para capturar el resultado de la página completa de esa manera? ¿O posibles problemas con los cambios a la convención de nomenclatura en el futuro? –

+0

El rendimiento alcanzado es insignificante en este caso. Sin embargo, esto se debe considerar como una solución alternativa y no como una solución permanente, ya que se está acercando a la forma en que las páginas maestras generan identificaciones únicas. Sin embargo, un aspecto positivo es que si la convención de nomenclatura para los elementos de la Página maestra cambia en el futuro, solo tiene que hacer un cambio en el evento Renderizar. –

+0

No estoy seguro de si este es el camino a seguir ... La codificación es mala y si reorganiza los contenedores ... la lógica se rompe. – Ben

4

Puede anular ClientID y UniqueID en los controles. Esto es de here, un artículo de Rick Strahl.

public override string UniqueID 
{ 
    get 
    { 
     return this.ID; 
    } 
} 

public override string ClientID 
{ 
    get 
    { 
     return this.ID; 
    } 
} 
+0

Esa es una idea interesante, también, pero no creo que me funcione, ya que tiene serias limitaciones con las publicaciones posteriores y estoy tratando de limitar los cambios que necesitaría hacer al código existente base. ¡Gracias! –

Cuestiones relacionadas