Bardzo spóźniona odpowiedź:
Zmagam się z tym z przerwami, odkąd zacząłem pracować w ASP. Oto najlepsze, jakie wymyśliłem:
Koncepcja: tworzę niestandardową kontrolkę, która ma tag. Następnie w przycisku umieszczam zdarzenie onclick, które ustawia document.location na żądaną wartość za pomocą JavaScript.
Nazwałem kontrolkę ButtonLink, aby łatwo uzyskać, jeśli pomyliłem się z LinkButton.
aspx:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ButtonLink.ascx.vb" Inherits="controls_ButtonLink" %>
<asp:Button runat="server" ID="button"/>
kod za:
Partial Class controls_ButtonLink
Inherits System.Web.UI.UserControl
Dim _url As String
Dim _confirm As String
Public Property NavigateUrl As String
Get
Return _url
End Get
Set(value As String)
_url = value
BuildJs()
End Set
End Property
Public Property confirm As String
Get
Return _confirm
End Get
Set(value As String)
_confirm = value
BuildJs()
End Set
End Property
Public Property Text As String
Get
Return button.Text
End Get
Set(value As String)
button.Text = value
End Set
End Property
Public Property enabled As Boolean
Get
Return button.Enabled
End Get
Set(value As Boolean)
button.Enabled = value
End Set
End Property
Public Property CssClass As String
Get
Return button.CssClass
End Get
Set(value As String)
button.CssClass = value
End Set
End Property
Sub BuildJs()
' This is a little kludgey in that if the user gives a url and a confirm message, we'll build the onclick string twice.
' But it's not that big a deal.
If String.IsNullOrEmpty(_url) Then
button.OnClientClick = Nothing
ElseIf String.IsNullOrEmpty(_confirm) Then
button.OnClientClick = String.Format("document.location='{0}';return false;", ResolveClientUrl(_url))
Else
button.OnClientClick = String.Format("if (confirm('{0}')) {{document.location='{1}';}} return false;", _confirm, ResolveClientUrl(_url))
End If
End Sub
End Class
Zalety tego schematu: Wygląda jak kontrola. Piszesz dla niego pojedynczy tag, <ButtonLink id = "mybutton" navigateurl = "blahblah" />
Wynikowy przycisk jest „prawdziwym” przyciskiem HTML, więc wygląda jak prawdziwy przycisk. Nie musisz próbować symulować wyglądu przycisku za pomocą CSS, a następnie zmagać się z różnymi wyglądami w różnych przeglądarkach.
Chociaż zdolności są ograniczone, możesz je łatwo rozszerzyć, dodając więcej właściwości. Jest prawdopodobne, że większość właściwości musiałaby po prostu „przejść” do podstawowego przycisku, tak jak zrobiłem w przypadku text, enabled i cssclass.
Jeśli ktoś ma prostsze, czystsze lub w inny sposób lepsze rozwiązanie, z przyjemnością to usłyszę. To jest uciążliwe, ale działa.