Сильно запізніла відповідь:
Я боровся з цим і вимикався з мого початку роботи в ASP. Ось найкраще, що я придумав:
Концепція: я створюю спеціальний елемент управління, який має тег. Потім у кнопку я поміщаю подію onclick, яка встановлює розташування document.location до потрібного значення за допомогою JavaScript.
Я зателефонував до управління ButtonLink, щоб я міг легко отримати, якщо його плутати з LinkButton.
aspx:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ButtonLink.ascx.vb" Inherits="controls_ButtonLink" %>
<asp:Button runat="server" ID="button"/>
код позаду:
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
Переваги цієї схеми: Це схоже на контроль. Ви пишете для нього один тег, <ButtonLink id = "mybutton" navigateurl = "blahblah" />
Отримана кнопка - це "справжня" HTML-кнопка і так виглядає як справжня кнопка. Не потрібно намагатися імітувати вигляд кнопки за допомогою CSS, а потім боротися з різними виглядами в різних браузерах.
Хоча здібності обмежені, ви можете легко розширити їх, додавши більше властивостей. Цілком ймовірно, що більшості властивостей просто доведеться "пропустити" до основної кнопки, як я це робив для тексту, включеного та cssclass.
Якщо у когось є більш просте, чистіше чи інше краще рішення, я би радий почути це. Це біль, але це працює.