Al escribir un control personalizado que siempre representa como un elemento span HTML. ¿Cómo puedo cambiarlo, por ejemplo, a un div?¿Cómo cambio el comportamiento de procesamiento de mi control personalizado de ser un lapso
Respuesta
Deducir de su control de WebControl de la siguiente manera:
public class MyCustomControl : WebControl {
public MyCustomControl() : base(HtmlTextWriterTag.Div) {}
}
Es decir, utilizar el constructor de la clase base que acepta la etiqueta de usar.
que normalmente tienen mi propia clase base que todos mis controles compuestos heredan de. Una de las propiedades que agrego a esto es un ContainerElement. Expuesto públicamente, el desarrollador puede elegir el elemento externo que quiera. Internamente establece la propiedad TagKey que rige esta representación en el control base. Todo lo siguiente a su clase de control/base.
Solo necesita establecer HTMLContainerElement que tendrá la inteli-ayuda de todos los elementos en la enumeración HtmlTextWriterTag.
/// <summary>
/// Local variable for storing what the container element for the rendered control will be.
/// </summary>
private HtmlTextWriterTag hosTagKey = HtmlTextWriterTag.Span;
/// <summary>
/// HTMLContanerElement is the tag key used to set the controls outer html control which appears in the markup.
/// The default is a span, but you can change this to be any HTML control you choose.
/// </summary>
public HtmlTextWriterTag HTMLContainerElement
{
get { return this.hosTagKey; }
set { this.hosTagKey = value; }
}
/// <summary>
/// Makes it so this control is a "div" element instead of the
/// standard "span" element.
/// </summary>
protected override HtmlTextWriterTag TagKey
{
get { return this.hosTagKey; }
}
Si proviene de CompositeControl no hay un constructor que tome un tipo de etiqueta. Puede anular TagKey (no lo he probado), pero una opción más flexible es anular el método RenderBeginTag y hacer que haga lo que quiera. La clase base representa un elemento de apertura "span", pero no tiene que llamar al método de clase base. No tiene que llamar nada si no desea que se reproduzca algo (en cuyo caso también anula RenderEndTag y tampoco llama a nada). Por ejemplo,
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, "reportViewer");
writer.AddAttribute(HtmlTextWriterAttribute.Id, "QueryViewerWrapper");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
}
Este código produce
<div class="reportViewer" id="QueryViewerWrapper">
que es exactamente lo que necesitaba para este control compuesto particular de la mía, un div con una clase para envolver un control ReportViewer. Incluí la ID solo para hacer que la salida sea más fácil de detectar.
- 1. jQuery: Cómo manejar el cambio de texto de lapso
- 2. Comportamiento de cambio Ankhsvn de cambio
- 3. Control personalizado de Silverlight Crear evento personalizado
- 4. ¿Cómo habilitar el soporte de diseño en un control personalizado?
- 5. Comportamiento AutoCompleteTextView personalizado
- 6. Creación de un control personalizado de SSRS
- 7. Control de contenedor personalizado ASP.NET
- 8. Cambiar el comportamiento personalizado de togglebutton en WPF
- 9. ¿Cómo disparo un evento personalizado desde un Control de usuario?
- 10. Comportamiento personalizado no se registrará en mi web.config
- 11. Diseño de inflado en control personalizado: ¿cómo?
- 12. WPF Custom Control - ¿Cómo prueba un control personalizado?
- 13. ¿Mostrar el icono personalizado para el control personalizado?
- 14. ¿Cómo se puede enlazar un control de usuario XAML personalizado?
- 15. Cómo agregar un control personalizado en TOP de otro
- 16. UITableViewCell control de reorden personalizado
- 17. posicionando un lapso dentro de un li
- 18. cómo crear control personalizado usando jquery ui?
- 19. Cómo incrustar JQuery en el control de servidor personalizado
- 20. ¿Cómo emulo el cambio de orientación de mi dispositivo Android?
- 21. Diferencia entre control de usuario y biblioteca de control personalizado
- 22. C# - orden de procesamiento de código - comportamiento extraño
- 23. Botón de cuadro de control personalizado
- 24. jQuery: Fuego clic en el evento en un lapso de
- 25. Cómo obtener el "tipo de letra" de un control de usuario personalizado
- 26. Crear un control de calendario personalizado de tamaño completo
- 27. Enlace con StringFormat en un control personalizado
- 28. ¿Establecer categoría de propiedad para el control personalizado de WPF?
- 29. ¿Cómo puedo cambiar el tamaño de un control personalizado que he construido
- 30. System.Uri.ToString cambio de comportamiento después de la instalación de VS2012
+1 overrode tagKey y funciona bien – Maslow