¿Cómo puedo usar la etiqueta de botón con ASP.NET?

Me gustaría usar el más nuevo<button>&nbsp;etiqueta en un sitio web ASP.NET que, entre otras cosas, permite el texto con estilo CSS e incrustar un gráfico dentro del botón. El control asp: Button se reproduce como<input type="button">, ¿hay alguna forma de hacer un control preexistente para<button>?

Por lo que he leído, hay una incompatibilidad con IE que publica el marcado del botón en lugar del atributo de valor cuando el botón se encuentra dentro de un<form>, pero en ASP.NET utilizará el evento onclick para lanzar __doPostBack de todos modos, por lo que no creo que esto sea un problema.

¿Hay alguna razón por la que no debería usar esto? Si no, ¿cómo lo apoyaría con asp: Button, o con un nuevo control de servidor basado en él? Preferiría no escribir mi propio control del servidor si eso pudiera evitarse.

Al principio el<button runat="server">&nbsp;La solución funcionó, pero inmediatamente me encontré con una situación en la que debía tener una propiedad CommandName, que el control HtmlButton no tiene. Parece que voy a necesitar crear un control heredado de Button después de todo.

¿Qué debo hacer para anular el método de renderización y hacer que rinda lo que quiero?

ACTUALIZAR

La respuesta de DanHerbert me ha interesado en encontrar una solución a esto nuevamente, así que he pasado más tiempo trabajando en ello.

Primero, hay una manera mucho más fácil de sobrecargar el Nombre de etiqueta:

public ModernButton() : base(HtmlTextWriterTag.Button)
{
}

El problema con la solución de Dan tal como está es que el código interno de la etiqueta se coloca en la propiedad de valor, lo que provoca un error de validación en la devolución. Un problema relacionado es, incluso si representa la propiedad de valor correctamente, la implementación de IE de braindead de<button>&nbsp;La etiqueta publica el innerhtml en lugar del valor de todos modos. Por lo tanto, cualquier implementación de esto debe anular el método AddAttributesToRender para representar correctamente la propiedad de valor, y también proporcionar algún tipo de solución para IE para que no arruine completamente la devolución.

El problema de IE puede ser insuperable si desea aprovechar las propiedades CommandName / CommandArgument para un control de base de datos. Esperemos que alguien pueda sugerir una solución para esto.

He avanzado en la prestación:

ModernButton.cs

Esto se traduce como un html adecuado<button>&nbsp;con el valor correcto, pero no funciona con el sistema ASP.Net PostBack. He escrito algo de lo que necesito para proporcionar elCommand&nbsp;evento, pero no se dispara.

Al inspeccionar este botón de lado a lado con un asp regular: el botón tiene el mismo aspecto que las diferencias que necesito. Así que no estoy seguro de cómo ASP.Net está cableando elCommand&nbsp;evento en este caso.

Un problema adicional es que los controles de servidor anidados no se representan (como puede ver con el atributo ParseChildren (falso)). Es bastante fácil inyectar texto html literal en el control durante el procesamiento, pero ¿cómo permite el soporte para controles de servidor anidados?