Jak mogę użyć znacznika przycisku w ASP.NET?

Chciałbym użyć nowszego<button> znacznik na stronie ASP.NET, który między innymi pozwala na tekst w stylu CSS i osadzenie grafiki wewnątrz przycisku. Asp: Przycisk steruje renderowaniem jako<input type="button">, czy istnieje jakikolwiek sposób na sprawienie, aby istniejąca kontrola była renderowana na<button>?

Z tego, co przeczytałem, jest niezgodność z IE publikującym znaczniki przycisku zamiast atrybutu wartości, gdy przycisk znajduje się w obrębie<form>, ale w ASP.NET i tak użyje zdarzenia onclick do wystrzelenia __doPostBack, więc nie sądzę, aby był to problem.

Czy są jakieś powody, dla których nie powinienem tego używać? Jeśli nie, to w jaki sposób można go obsłużyć za pomocą asp: Button lub nowej kontrolki serwera opartej na tym? Wolałbym nie pisać własnej kontroli serwera, jeśli można tego uniknąć.

Na początku<button runat="server"> rozwiązanie zadziałało, ale natychmiast natrafiłem na sytuację, w której musi mieć właściwość CommandName, której nie ma kontrolka HtmlButton. Wygląda na to, że mimo wszystko będę musiał utworzyć kontrolkę odziedziczoną po Button.

Co muszę zrobić, aby przesłonić metodę renderowania i sprawić, że renderuje to, co chcę?

AKTUALIZACJA

Odpowiedź DanHerberta sprawiła, że ​​ponownie zainteresowałem się rozwiązaniem tego problemu, więc poświęciłem mu trochę więcej czasu.

Po pierwsze, istnieje znacznie łatwiejszy sposób przeciążania nazwy zmiennej:

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

Problem z rozwiązaniem Dana w obecnej postaci polega na umieszczeniu wewnętrznego znacznika tagu we właściwości value, co powoduje błąd sprawdzania poprawności na postbacku. Związany z tym problem polega na tym, że nawet jeśli poprawnie renderujesz właściwość wartości, implementacja<button> znacznik mimo to wpisuje wewnętrzną część kodu zamiast wartości. Tak więc każda implementacja tego wymaga zastąpienia metody AddAttributesToRender w celu poprawnego renderowania właściwości wartości, a także zapewnienia pewnego obejścia dla IE, aby nie zepsuło to całkowicie postbacku.

Problem IE może być nie do pokonania, jeśli chcesz skorzystać z właściwości CommandName / CommandArgument dla formantu danych. Mam nadzieję, że ktoś może zaproponować obejście tego problemu.

Dokonałem postępu w renderowaniu:

ModernButton.cs

To sprawia, że ​​jest to właściwy HTML<button> z poprawną wartością, ale nie działa z systemem ASP.Net PostBack. Napisałem kilka rzeczy, które muszę dostarczyćCommand zdarzenie, ale nie odpala.

Podczas sprawdzania tego przycisku obok zwykłego asp: Button, wyglądają tak samo, jak różnice, których potrzebuję. Więc nie jestem pewien, jak ASP.Net łączyCommand zdarzenie w tym przypadku.

Dodatkowym problemem jest to, że zagnieżdżone kontrolki serwera nie są renderowane (jak widać z atrybutem ParseChildren (false)). Dość łatwo jest wprowadzić dosłowny tekst HTML do kontrolki podczas renderowania, ale jak zezwolić na obsługę zagnieżdżonych kontrolek serwera?

questionAnswers(7)

yourAnswerToTheQuestion