2012-06-20 20 views
7

Estoy usando ASP.NET 4.0 WebForms. También estoy usando páginas maestras que heredan de otras páginas maestras. Tengo controles dentro de los paneles. Básicamente hay contenedores multinivel. Esto está causando que los elementos tengan ID ENORMES. ¡Estoy viendo identificaciones de unos 300 bytes de largo!¿Cómo hacer que los controles del servidor ASP.NET obtengan los ID más cortos?

Cuando hay cientos de elementos en una página, estos ID aumentan el tamaño de la página dramáticamente. Tengo un GridView con controles de enlace.

¿Cuál es la mejor forma de que cada control de servidor tenga la identificación más corta posible? ¿Hay alguna manera de que cada elemento no dependa de su identificador de contenedor (que no sea ClientIDMode="static") aunque sea único en la página? Por último, ¿ASP.NET MVC alivia este problema?

Respuesta

1

Creo que ClientIDMode=static está en una de las vías. Usted puede configurar esto en su web.conf también. Y en Asp.Net mvc, tiene el control total sobre html (especialmente en Razor). No hay tales piensa como webforms. Usted tiene control sobre la asignación de identificadores a etiquetas html. De hecho, Asp.Net mvc es la respuesta a todos los demás marcos.

1

Por último, ¿ASP.NET MVC alivia este problema?

Sí.

No hay ViewState en MVC y no está ejecutando ningún control en el servidor.

No está utilizando ningún control de servidor que genere toneladas de HTML difíciles de leer.

Usted tiene control total sobre ClientID 's en MVC.

<a href="#" id="myID">Click</a> 

El marcado anteriormente siempre tendrá el id de myID a menos que cambie yo mismo.

2

MVC alivia completamente este problema porque no hay representación del lado del servidor del código html de la misma manera. Todo su html está directamente en sus vistas, por lo que tiene control total sobre cada elemento. También corre el riesgo (en el caso de una página que tiene cientos de entradas) de entradas en colisión.

Una forma en que puede ayudar a acortar todo el html producido en WebForms es eliminar todo lo que no sea absolutamente necesario para ser un webusercontrol. Por ejemplo, la mayoría de las etiquetas son estáticas. Se pueden reemplazar normalmente con texto estándar o elementos que no incluyen el atributo runat="server". Esto evitará que se generen identificadores en primer lugar. Otra forma de reducir la cantidad de basura que se genera es eliminar tantos controles como puedas del ViewState. Esto evitará que carguen sus datos de estado y reducirán el ViewState.

ClientIDMode es una propiedad heredable, por lo que puede establecerla en el nivel de página web.config (global), web.config (local) o de página. También puedes usarlo individualmente. Su pregunta elimina esto específicamente, pero probablemente sea la mejor opción con la mayor flexibilidad sin reescribir lo que ya tiene. Si la reescritura no es un problema, recomendaría usar MVC.

Cuestiones relacionadas