Banyak jawaban yang terlambat:
Saya telah bergulat dengan ini dan mematikan sejak saya mulai bekerja di ASP. Inilah yang terbaik yang saya hasilkan:
Konsep: Saya membuat kontrol khusus yang memiliki tag. Kemudian pada tombol saya meletakkan event onclick yang menetapkan document.location ke nilai yang diinginkan dengan JavaScript.
Saya memanggil tombol kontrol ButtonLink, sehingga saya bisa dengan mudah mendapatkan jika bingung dengan LinkButton.
aspx:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ButtonLink.ascx.vb" Inherits="controls_ButtonLink" %>
<asp:Button runat="server" ID="button"/>
kode di belakang:
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
Keuntungan dari skema ini: Sepertinya kontrol. Anda menulis satu tag untuk itu, <ButtonLink id = "mybutton" navigateurl = "blahblah" />
Tombol yang dihasilkan adalah tombol HTML "nyata" dan tampak seperti tombol nyata. Anda tidak perlu mencoba mensimulasikan tampilan tombol dengan CSS dan kemudian berjuang dengan tampilan yang berbeda di browser yang berbeda.
Meskipun kemampuannya terbatas, Anda dapat dengan mudah memperluasnya dengan menambahkan lebih banyak properti. Kemungkinan sebagian besar properti hanya perlu "melewati" ke tombol yang mendasarinya, seperti yang saya lakukan untuk teks, diaktifkan dan cssclass.
Jika ada yang punya solusi yang lebih sederhana, lebih bersih atau lebih baik, saya akan senang mendengarnya. Ini menyakitkan, tetapi berhasil.