Je voudrais utiliser la plus récente, <button>
balise dans un ASP.NET site web, qui, entre autres choses, permet CSS, texte et l'incorporation d'un graphique à l'intérieur du bouton. L'asp:Bouton de contrôle de rendu sous la forme d' <input type="button">
, est-il possible de faire une préexistant de contrôle de rendu en <button>
?
De ce que j'ai lu il y a une incompatibilité avec IE l'affichage du bouton de balisage au lieu de la valeur de l'attribut lorsque le bouton est situé à l'intérieur d'un <form>
, mais dans ASP.NET il sera à l'aide de l'événement onclick de feu __doPostBack de toute façon, donc je ne pense pas que ce serait un problème.
Existe-il des raisons pourquoi je ne devrais pas l'utiliser? Si non, comment vous y prendriez-vous de le soutenir avec de l'asp:Button, ou d'un nouveau serveur de contrôle sur la base d'? Je préfère ne pas écrire mon propre serveur de contrôle si cela peut être évité.
Au premier abord, l' <button runat="server">
solution a fonctionné, mais j'ai immédiatement couru dans une situation où elle doit avoir une propriété CommandName, qui le contrôle HtmlButton n'ont pas. On dirait que je vais avoir besoin de créer un contrôle hérité de Bouton après tout.
Que dois-je faire pour remplacer la méthode render et faire rendre ce que je veux?
Mise à JOUR
DanHerbert réponse m'a fait intéressés à trouver une solution à cela de nouveau, j'ai donc passé un peu plus de temps à travailler sur elle.
Tout d'abord, il y a beaucoup de moyen plus facile de surcharger le TagName:
public ModernButton() : base(HtmlTextWriterTag.Button)
{
}
Le problème avec Dan la solution, comme il se est le innerhtml de la balise est placée dans la valeur de la propriété, ce qui provoque une erreur de validation sur la publication. Un problème connexe est, même si vous rendre la valeur de la propriété correctement, c'est à dire de braindead de mise en œuvre de l' <button>
balise affiche le innerhtml au lieu de la valeur de toute façon. Ainsi, toute mise en œuvre de cette doit remplacer le AddAttributesToRender méthode afin d'afficher correctement la valeur de la propriété, et fournissent également une sorte de solution de contournement pour IE, donc il n'est pas complètement bousiller la publication.
Le problème IE peut être insurmontable si vous voulez profiter de la CommandName/CommandArgument les propriétés d'un contrôle lié aux données. J'espère que quelqu'un peut proposer une solution de contournement pour ce.
J'ai fait des progrès sur le rendu:
Cela rend un bon html <button>
avec la valeur correcte, mais il ne fonctionne pas avec le ASP.Net Publication du système. J'ai écrit certains de ce que j'ai besoin de fournir à l' Command
événement, mais il n'a pas d'incendie.
Lors de l'inspection ce bouton side-by-side avec un régulier asp:Button, ils regardent la même chose d'autres que les différences que j'ai besoin. Donc je ne suis pas sûr de savoir comment ASP.Net est de câblage de l' Command
événement dans ce cas.
Un problème supplémentaire est, imbriqués les contrôles serveur ne sont pas rendus (comme vous pouvez le voir avec la ParseChildren(faux) attribut). Il est assez facile d'injecter littérale du texte html dans le contrôle en cours de rendu, mais comment voulez-vous permettre de soutien pour imbriqués les contrôles serveur?