Quando si scrive un controllo personalizzato viene sempre visualizzato come elemento di estensione HTML. Come posso cambiarlo ad esempio su un div?Come si modifica il comportamento di rendering del controllo personalizzato da span
risposta
derivare il controllo da WebControl come segue:
public class MyCustomControl : WebControl {
public MyCustomControl() : base(HtmlTextWriterTag.Div) {}
}
Cioè, utilizzare il costruttore della classe base che accetta il tag da usare.
Normalmente ho una mia classe base da cui ereditano tutti i miei controlli compositi. Una delle proprietà che aggiungo a questo è un ContainerElement. Pubblicamente esposto, lo sviluppatore può scegliere qualsiasi elemento esterno che vogliono. Internamente imposta la proprietà TagKey che governa questo rendering sul controllo di base. Tutto quanto segue al tuo controllo/classe base.
Hai solo bisogno di impostare HTMLContainerElement che avrà l'inteli-aiuto di tutti gli elementi nell'enumerazione 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; }
}
Se si deriva da CompositeControl non esiste un costruttore che accetta un tipo di tag. Puoi sovrascrivere TagKey (non l'ho provato), ma un'opzione più flessibile è quella di sovrascrivere il metodo RenderBeginTag e farlo fare ciò che vuoi. La classe base rende un elemento di apertura "span", ma non è necessario chiamare il metodo della classe base. Non è necessario chiamare nulla se non si desidera rendere nulla il rendering (nel qual caso, anche sovrascrivere RenderEndTag e non chiamare nulla neanche lì). Ad esempio,
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, "reportViewer");
writer.AddAttribute(HtmlTextWriterAttribute.Id, "QueryViewerWrapper");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
}
Questo codice produce
<div class="reportViewer" id="QueryViewerWrapper">
che è esattamente quello che mi serviva per questo particolare controllo composito di mio, un div con una classe per avvolgere un controllo ReportViewer. Includo l'ID solo per rendere più facile l'individuazione dell'output.
- 1. Misurazione del tempo di modifica del rendering avviato da Javascript
- 2. Modifica del comportamento del ritorno a capo
- 3. Come si attiva un evento personalizzato da un controllo utente?
- 4. Nome variabile della modifica Java modifica il comportamento del programma
- 5. Drupal 7 come eseguire il rendering del campo personalizzato
- 6. Come si modifica il colore di sfondo di un controllo grafico ASP.NET?
- 7. Come si modifica il carattere predefinito utilizzato da Silverlight?
- 8. Controllo personalizzato ASP.NET - Tag del server sconosciuto
- 9. Controllo DPI dell'output dell'immagine mediante il rendering()
- 10. Modifica il colore del controllo segmento selezionato
- 11. Come riavviare il bambino con stato personalizzato usando il comportamento del supervisore Erlang OTP?
- 12. Comportamento copia/incolla personalizzato con C# winforms mentre consente la modifica del testo copia/incolla
- 13. Nessun tipo numerico da aggregare: modifica del comportamento groupby()?
- 14. Come implementare l'associazione dati per il controllo personalizzato di Windows?
- 15. Come si modifica il colore di sfondo del controllo struttura a schede in Winforms?
- 16. Ignorare il comportamento SELECT del tasto Invio
- 17. Tridion ASCX DCP non esegue il rendering del controllo figlio
- 18. Vim: modifica comportamento clic del mouse
- 19. modifica comportamento predefinito operatore
- 20. La modifica dello stato di reazione non è il rendering
- 21. Comando di modifica MFC comportamento strano
- 22. Rendering personalizzato Selectize.js con html statico
- 23. aggiungendo runat = "server" modifica il comportamento del layout
- 24. Modifica origine evento Fullcalendar dopo il rendering
- 25. Come si legge e si modifica il valore di un controllo TEdit?
- 26. Comportamento strano del controllo definito (super)
- 27. Perché il controllo DotNetNuke TextEditor si interrompe dopo la modifica del modulo .ascx File
- 28. Xamarin DesignTime Custom Controls Rendering in XCode, modifica le proprietà del controllo in DesignTime
- 29. Modifica comportamento Session.delete() di SQLAlchemy
- 30. Come creare il controllo personalizzato UIDatePicker
+1 overrode tagKey e funziona bene – Maslow