Очень запоздалый ответ:
Я боролся с этим с тех пор, как впервые начал работать в 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, а затем бороться с разными взглядами в разных браузерах.
Хотя возможности ограничены, вы можете легко расширить его, добавив больше свойств. Вполне вероятно, что большинству свойств придется просто «пройти» к соответствующей кнопке, как я это сделал для text, enabled и cssclass.
Если у кого-нибудь есть более простое, более чистое или иное лучшее решение, я буду рад это услышать. Это боль, но это работает.